jQuery custom content scroller
Highly customizable custom scrollbar jQuery plugin. Features include vertical and/or horizontal scrollbar(s), adjustable scrolling momentum, mouse-wheel (via jQuery mousewheel plugin), keyboard and touch support, ready-to-use themes and customization via CSS, RTL direction support, option parameters for full control of scrollbar functionality, methods for triggering actions like scroll-to, update, destroy etc., user-defined callbacks and more.
Current version 3.1.5 (Changelog)
Upgrading from version 2
How to use it
Get started by downloading the archive which contains the plugin files (and a large amount of HTML demos and examples). Extract and upload jquery.mCustomScrollbar.concat.min.js, jquery.mCustomScrollbar.css and mCSB_buttons.png to your web server (alternatively you can load plugin files from a CDN).
HTML
Include jquery.mCustomScrollbar.css in the head tag your HTML document (more info)
<link rel="stylesheet" href="/path/to/jquery.mCustomScrollbar.css" />
Include jQuery library (if your project doesn’t use it already) and jquery.mCustomScrollbar.concat.min.js in the head tag or at the very bottom of your document, just before the closing body tag
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="/path/to/jquery.mCustomScrollbar.concat.min.js"></script>
CSS
The element(s) you want to add scrollbar(s) should have the typical CSS properties of an overflowed block which are a height (or max-height) value, an overflow value of auto (or hidden) and content long enough to require scrolling. For horizontal scrollbar, the element should have a width (or max-width) value set.
If you prefer to set your element’s height/width via javascript, you can use the setHeight
/setWidth
option parameters.
Initialization
Initialize via javascript
After files inclusion, call mCustomScrollbar function on the element selector you want to add the scrollbar(s)
<script> (function($){ $(window).on("load",function(){ $(".content").mCustomScrollbar(); }); })(jQuery); </script>
Initialize via HTML
Add the class mCustomScrollbar
to any element you want to add custom scrollbar(s) with default options. Optionally, set its axis via the HTML data attribute data-mcs-axis
(e.g. "x"
for horizontal and "y"
for vertical) and its theme via data-mcs-theme
. For example:
<div class="mCustomScrollbar" data-mcs-theme="dark"> <!-- your content --> </div>
Basic configuration & option parameters
axis
By default, the script applies a vertical scrollbar. To add a horizontal or 2-axis scrollbars, invoke mCustomScrollbar function with the axis option set to "x"
or "yx"
respectively
$(".content").mCustomScrollbar({ axis:"x" // horizontal scrollbar });
$(".content").mCustomScrollbar({ axis:"yx" // vertical and horizontal scrollbar });
theme
To quickly change the appearance of the scrollbar, set the theme option parameter to any of the ready-to-use themes available in jquery.mCustomScrollbar.css, for example:
$(".content").mCustomScrollbar({ theme:"dark" });
Configuration
You can configure your scrollbar(s) using the following option parameters on mCustomScrollbar function
Usage $(selector).mCustomScrollbar({ option: value });
setWidth: false
- Set the width of your content (overwrites CSS width), value in pixels (integer) or percentage (string).
setHeight: false
- Set the height of your content (overwrites CSS height), value in pixels (integer) or percentage (string).
setTop: 0
- Set the initial css top property of content, accepts string values (css top position).
Example:setTop: "-100px"
.
setLeft: 0
- Set the initial css left property of content, accepts string values (css left position).
Example:setLeft: "-100px"
.
axis: "string"
- Define content’s scrolling axis (the type of scrollbars added to the element: vertical and/of horizontal).
Available values:"y"
,"x"
,"yx"
.axis: "y"
– vertical scrollbar (default)axis: "x"
– horizontal scrollbaraxis: "yx"
– vertical and horizontal scrollbars
scrollbarPosition: "string"
- Set the position of scrollbar in relation to content.
Available values:"inside"
,"outside"
.
SettingscrollbarPosition: "inside"
(default) makes scrollbar appear inside the element. SettingscrollbarPosition: "outside"
makes scrollbar appear outside the element. Note that setting the value to"outside"
requires your element (or parent elements) to have CSSposition: relative
(otherwise the scrollbar will be positioned in relation to document’s root element).
scrollInertia: integer
- Set the amount of scrolling momentum as animation duration in milliseconds.
Higher value equals greater scrolling momentum which translates to smoother/more progressive animation. Set to0
to disable.
autoDraggerLength: boolean
- Enable or disable auto-adjusting scrollbar dragger length in relation to scrolling amount (same bahavior with browser’s native scrollbar).
SetautoDraggerLength: false
when you want your scrollbar to (always) have a fixed size.
autoHideScrollbar: boolean
- Enable or disable auto-hiding the scrollbar when inactive.
SettingautoHideScrollbar: true
will hide the scrollbar(s) when scrolling is idle and/or cursor is out of the scrolling area.
Please note that some special themes like “minimal” overwrite this option.
autoExpandScrollbar: boolean
- Enable or disable auto-expanding the scrollbar when cursor is over or dragging the scrollbar.
alwaysShowScrollbar: integer
- Always keep scrollbar(s) visible, even when there’s nothing to scroll.
alwaysShowScrollbar: 0
– disable (default)alwaysShowScrollbar: 1
– keep dragger rail visiblealwaysShowScrollbar: 2
– keep all scrollbar components (dragger, rail, buttons etc.) visible
snapAmount: integer
- Make scrolling snap to a multiple of a fixed number of pixels. Useful in cases like scrolling tabular data, image thumbnails or slides and you need to prevent scrolling from stopping half-way your elements. Note that your elements must be of equal width or height in order for this to work properly.
To set different values for vertical and horizontal scrolling, use an array:[y,x]
snapOffset: integer
- Set an offset (in pixels) for the snapAmount option. Useful when for example you need to offset the snap amount of table rows by the table header.
mouseWheel:{ enable: boolean }
- Enable or disable content scrolling via mouse-wheel.
mouseWheel:{ scrollAmount: integer }
- Set the mouse-wheel scrolling amount (in pixels). The default value
"auto"
adjusts scrolling amount according to scrollable content length.
mouseWheel:{ axis: "string" }
- Define the mouse-wheel scrolling axis when both vertical and horizontal scrollbars are present.
Setaxis: "y"
(default) for vertical oraxis: "x"
for horizontal scrolling.
mouseWheel:{ preventDefault: boolean }
- Prevent the default behaviour which automatically scrolls the parent element when end or beginning of scrolling is reached (same bahavior with browser’s native scrollbar).
mouseWheel:{ deltaFactor: integer }
- Set the number of pixels one wheel notch scrolls. The default value “auto” uses the OS/browser value.
mouseWheel:{ normalizeDelta: boolean }
- Enable or disable mouse-wheel (delta) acceleration. Setting
normalizeDelta: true
translates mouse-wheel delta value to -1 or 1.
mouseWheel:{ invert: boolean }
- Invert mouse-wheel scrolling direction. Set to
true
to scroll down or right when mouse-wheel is turned upwards.
mouseWheel:{ disableOver: [array] }
- Set the tags that disable mouse-wheel when cursor is over them.
Default value:["select","option","keygen","datalist","textarea"]
scrollButtons:{ enable: boolean }
- Enable or disable scrollbar buttons.
scrollButtons:{ scrollAmount: integer }
- Set the buttons scrolling amount (in pixels). The default value
"auto"
adjusts scrolling amount according to scrollable content length.
scrollButtons:{ scrollType: "string" }
- Define the buttons scrolling type/behavior.
scrollType: "stepless"
– continuously scroll content while pressing the button (default)scrollType: "stepped"
– each button click scrolls content by a certain amount (defined in scrollAmount option above)
scrollButtons:{ tabindex: integer }
- Set a tabindex value for the buttons.
keyboard:{ enable: boolean }
- Enable or disable content scrolling via the keyboard.
The plugin supports the directional arrows (top, left, right and down), page-up (PgUp), page-down (PgDn), Home and End keys.
keyboard:{ scrollAmount: integer }
- Set the keyboard arrows scrolling amount (in pixels). The default value
"auto"
adjusts scrolling amount according to scrollable content length.
keyboard:{ scrollType: "string" }
- Define the keyboard arrows scrolling type/behavior.
scrollType: "stepless"
– continuously scroll content while pressing the arrow key (default)scrollType: "stepped"
– each key release scrolls content by a certain amount (defined in scrollAmount option above)
contentTouchScroll: integer
- Enable or disable content touch-swipe scrolling for touch-enabled devices.
To completely disable, setcontentTouchScroll: false
.
Integer values define the axis-specific minimum amount required for scrolling momentum (default:25
).
documentTouchScroll: boolean
- Enable or disable document touch-swipe scrolling for touch-enabled devices.
advanced:{ autoExpandHorizontalScroll: boolean }
- Auto-expand content horizontally (for
"x"
or"yx"
axis).
If set totrue
, content will expand horizontally to accommodate any floated/inline-block elements.
Setting its value to2
(integer) forces the non scrollHeight/scrollWidth method. A value of3
forces the scrollHeight/scrollWidth method.
advanced:{ autoScrollOnFocus: "string" }
- Set the list of elements/selectors that will auto-scroll content to their position when focused.
For example, when pressing TAB key to focus input fields, if the field is out of the viewable area the content will scroll to its top/left position (same bahavior with browser’s native scrollbar).
To completely disable this functionality, setautoScrollOnFocus: false
.
Default:"input,textarea,select,button,datalist,keygen,a[tabindex],area,object,[contenteditable='true']"
advanced:{ updateOnContentResize: boolean }
- Update scrollbar(s) automatically on content, element or viewport resize.
The value should betrue
(default) for fluid layouts/elements, adding/removing content dynamically, hiding/showing elements etc.
advanced:{ updateOnImageLoad: boolean }
- Update scrollbar(s) automatically each time an image inside the element is fully loaded.
Default value isauto
which triggers the function only on"x"
and"yx"
axis (if needed).
The value should betrue
when your content contains images and you need the function to trigger on any axis.
advanced:{ updateOnSelectorChange: "string" }
- Update scrollbar(s) automatically when the amount and size of specific selectors changes.
Useful when you need to update the scrollbar(s) automatically, each time a type of element is added, removed or changes its size.
For example, settingupdateOnSelectorChange: "ul li"
will update scrollbars each time list-items inside the element are changed.
Setting the value totrue
, will update scrollbars each time any element is changed.
To disable (default) set tofalse
.
advanced:{ extraDraggableSelectors: "string" }
- Add extra selector(s) that’ll release scrollbar dragging upon mouseup, pointerup, touchend etc.
Example:extraDraggableSelectors: ".myClass, #myID"
advanced:{ releaseDraggableSelectors: "string" }
- Add extra selector(s) that’ll allow scrollbar dragging upon mousemove/up, pointermove/up, touchend etc.
Example:releaseDraggableSelectors: ".myClass, #myID"
advanced:{ autoUpdateTimeout: integer }
- Set the auto-update timeout in milliseconds.
Default timeout:60
theme: "string"
- Set the scrollbar theme.
View all ready-to-use themes
All themes are contained in plugin’s CSS file (jquery.mCustomScrollbar.css).
Default theme:"light"
callbacks:{ onCreate: function(){} }
- A function to call when plugin markup is created.
Example:
callbacks:{ onCreate:function(){ console.log("Plugin markup generated"); } }
callbacks:{ onInit: function(){} }
- A function to call when scrollbars have initialized (demo).
Example:
callbacks:{ onInit:function(){ console.log("Scrollbars initialized"); } }
callbacks:{ onScrollStart: function(){} }
- A function to call when scrolling starts (demo).
Example:
callbacks:{ onScrollStart:function(){ console.log("Scrolling started..."); } }
callbacks:{ onScroll: function(){} }
- A function to call when scrolling is completed (demo).
Example:
callbacks:{ onScroll:function(){ console.log("Content scrolled..."); } }
callbacks:{ whileScrolling: function(){} }
- A function to call while scrolling is active (demo).
Example:
callbacks:{ whileScrolling:function(){ console.log("Scrolling..."); } }
callbacks:{ onTotalScroll: function(){} }
- A function to call when scrolling is completed and content is scrolled all the way to the end (bottom/right) (demo).
Example:
callbacks:{ onTotalScroll:function(){ console.log("Scrolled to end of content."); } }
callbacks:{ onTotalScrollBack: function(){} }
- A function to call when scrolling is completed and content is scrolled back to the beginning (top/left) (demo).
Example:
callbacks:{ onTotalScrollBack:function(){ console.log("Scrolled back to the beginning of content."); } }
callbacks:{ onTotalScrollOffset: integer }
- Set an offset for the onTotalScroll option.
For example, settingonTotalScrollOffset: 100
will trigger the onTotalScroll callback 100 pixels before the end of scrolling is reached.
callbacks:{ onTotalScrollBackOffset: integer }
- Set an offset for the onTotalScrollBack option.
For example, settingonTotalScrollBackOffset: 100
will trigger the onTotalScrollBack callback 100 pixels before the beginning of scrolling is reached.
callbacks:{ alwaysTriggerOffsets: boolean }
- Set the behavior of calling onTotalScroll and onTotalScrollBack offsets.
By default, callback offsets will trigger repeatedly while content is scrolling within the offsets.
SetalwaysTriggerOffsets: false
when you need to trigger onTotalScroll and onTotalScrollBack callbacks once, each time scroll end or beginning is reached.
callbacks:{ onOverflowY: function(){} }
- A function to call when content becomes long enough and vertical scrollbar is added.
Example:
callbacks:{ onOverflowY:function(){ console.log("Vertical scrolling required"); } }
callbacks:{ onOverflowX: function(){} }
- A function to call when content becomes wide enough and horizontal scrollbar is added.
Example:
callbacks:{ onOverflowX:function(){ console.log("Horizontal scrolling required"); } }
callbacks:{ onOverflowYNone: function(){} }
- A function to call when content becomes short enough and vertical scrollbar is removed.
Example:
callbacks:{ onOverflowYNone:function(){ console.log("Vertical scrolling is not required"); } }
callbacks:{ onOverflowXNone: function(){} }
- A function to call when content becomes narrow enough and horizontal scrollbar is removed.
Example:
callbacks:{ onOverflowXNone:function(){ console.log("Horizontal scrolling is not required"); } }
callbacks:{ onBeforeUpdate: function(){} }
- A function to call right before scrollbar(s) are updated.
Example:
callbacks:{ onBeforeUpdate:function(){ console.log("Scrollbars will update"); } }
callbacks:{ onUpdate: function(){} }
- A function to call when scrollbar(s) are updated.
Example:
callbacks:{ onUpdate:function(){ console.log("Scrollbars updated"); } }
callbacks:{ onImageLoad: function(){} }
- A function to call each time an image inside the element is fully loaded and scrollbar(s) are updated.
Example:
callbacks:{ onImageLoad:function(){ console.log("Image loaded"); } }
callbacks:{ onSelectorChange: function(){} }
- A function to call each time a type of element is added, removed or changes its size and scrollbar(s) are updated.
Example:
callbacks:{ onSelectorChange:function(){ console.log("Scrollbars updated"); } }
live: "string"
- Enable or disable applying scrollbar(s) on all elements matching the current selector, now and in the future.
Setlive: true
when you need to add scrollbar(s) on elements that do not yet exist in the page. These could be elements added by other scripts or plugins after some action by the user takes place (e.g. lightbox markup may not exist untill the user clicks a link).
If you need at any time to disable or enable the live option, setlive: "off"
and"on"
respectively.
You can also tell the script to disable live option after the first invocation by settinglive: "once"
.
liveSelector: "string"
- Set the matching set of elements (instead of the current selector) to add scrollbar(s), now and in the future.
Plugin methods
Ways to execute various plugin actions programmatically from within your script(s).
update
Usage $(selector).mCustomScrollbar("update");
Call the update method to manually update existing scrollbars to accommodate new content or resized element(s). This method is by default called automatically by the script (via updateOnContentResize
option) when the element itself, its content or scrollbar size changes.
scrollTo
Usage $(selector).mCustomScrollbar("scrollTo",position,options);
Call the scrollTo method to programmatically scroll the content to the position parameter (demo).
position parameter
Position parameter can be:
"string"
- e.g. element selector:
"#element-id"
- e.g. special pre-defined position:
"bottom"
- e.g. number of pixels less/more:
"-=100"
/"+=100"
- e.g. element selector:
integer
- e.g. number of pixels:
100
- e.g. number of pixels:
[array]
- e.g. different y/x position:
[100,50]
- e.g. different y/x position:
object/function
- e.g. jQuery object:
$("#element-id")
- e.g. js object:
document.getelementbyid("element-id")
- e.g. function:
function(){ return 100; }
- e.g. jQuery object:
Pre-defined position strings:
"bottom"
– scroll to bottom"top"
– scroll to top"right"
– scroll to right"left"
– scroll to left"first"
– scroll to the position of the first element within content"last"
– scroll to the position of the last element within content
Method options
scrollInertia: integer
- Scroll-to duration, value in milliseconds.
Example:
$(selector).mCustomScrollbar("scrollTo","bottom",{ scrollInertia:3000 });
scrollEasing: "string"
- Scroll-to animation easing, values:
"linear"
,"easeOut"
,"easeInOut"
.
Example:
$(selector).mCustomScrollbar("scrollTo","bottom",{ scrollEasing:"easeOut" });
moveDragger: boolean
- Scroll scrollbar dragger (instead of content).
Example:
$(selector).mCustomScrollbar("scrollTo",80,{ moveDragger:true });
timeout: integer
- Set a timeout for the method (the default timeout is 60 ms in order to work with automatic scrollbar update), value in milliseconds.
Example:
$(selector).mCustomScrollbar("scrollTo","top",{ timeout:1000 });
callbacks: boolean
- Trigger user defined callbacks after scroll-to completes.
Example:
$(selector).mCustomScrollbar("scrollTo","left",{ callbacks:false });
stop
Usage $(selector).mCustomScrollbar("stop");
Stops any running scrolling animations (usefull when you wish to interupt a previously scrollTo method call).
disable
Usage $(selector).mCustomScrollbar("disable");
Calling disable method will temporarily disable the scrollbar (demo). Disabled scrollbars can be re-enable by calling the update method.
To disable the scrollbar and reset its content position, set the method’s reset parameter to true
$(selector).mCustomScrollbar("disable",true);
destroy
Usage $(selector).mCustomScrollbar("destroy");
Calling destroy method will completely remove the custom scrollbar and return the element to its original state (demo).
Scrollbar styling & themes
You can design and visually customize your scrollbars with pure CSS, using jquery.mCustomScrollbar.css which contains the default/basic styling and all scrollbar themes.
The easiest/quickest way is to select a ready-to-use scrollbar theme. For example:
$(selector).mCustomScrollbar({ theme:"dark" });
You can modify the default styling or any theme either directly in jquery.mCustomScrollbar.css or by overwriting the CSS rules in another stylesheet.
Creating a new scrollbar theme
Create a name for your theme (e.g. “my-theme”) and set it as the value of the theme option
$(selector).mCustomScrollbar({ theme:"my-theme" });
Your element will get the class “mCS-my-theme” (your theme-name with “mCS” prefix), so you can create your CSS using the .mCS-my-theme
in your rules. For instance:
.mCS-my-theme.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: red; } .mCS-my-theme.mCSB_scrollTools .mCSB_draggerRail{ background-color: white; } /* and so on... */
In the same manner you can clone any existing theme (e.g. “dark”), change its selector (e.g. .mCS-dark
) to your own theme name (e.g. .mCS-my-theme
) and modify its CSS rules.
Scrollbar markup
The plugin applies specific id (unique) and/or classes to every scrollbar element/component, meaning that you can target and modify any scrollbar in more than one ways.
For example, every element with a scrollbar gets a unique class in the form of _mCS_1
, _mCS_2
etc. Every scrollbar container element gets a unique id in the form of mCSB_1_scrollbar_vertical
, mCSB_2_scrollbar_vertical
etc. Every scrollbar dragger gets a unique id in the form of mCSB_1_dragger_vertical
, mCSB_2_dragger_vertical
etc. in addition to the class mCSB_dragger
. All these mean that you can do stuff like:
._mCS_1 .mCSB_dragger .mCSB_dragger_bar{ background-color: red; } ._mCS_2 .mCSB_dragger .mCSB_dragger_bar{ background-color: green; } #mCSB_3_dragger_vertical .mCSB_dragger_bar{ background-color: blue; } #mCSB_1_scrollbar_vertical .mCSB_dragger{ height: 100px; } #mCSB_1_scrollbar_horizontal .mCSB_dragger{ width: 100px; } .mCSB_1_scrollbar .mCSB_dragger .mCSB_draggerRail{ width: 4px; }
User-defined callbacks
You can trigger your own js function(s) by calling them inside mCustomScrollbar callbacks option parameter
$(".content").mCustomScrollbar({ callbacks:{ onScroll:function(){ myCustomFn(this); } } }); function myCustomFn(el){ console.log(el.mcs.top); }
In the example above, each time a scroll event ends and content has stopped scrolling, the content’s top position will be logged in browser’s console. There are available callbacks for each step of the scrolling event:
onScrollStart
– triggers the moment a scroll event startswhileScrolling
– triggers while scroll event is runningonScroll
– triggers when a scroll event completesonTotalScroll
– triggers when content has scrolled all the way to bottom or rightonTotalScrollBack
– triggers when content has scrolled all the way back to top or left
You can set an offset value (pixels) for both onTotalScroll
and onTotalScrollBack
by setting onTotalScrollOffset
and onTotalScrollBackOffset
respectively (view example).
By default, onTotalScroll
and onTotalScrollBack
callbacks are triggered repeatedly. To prevent multiple calls when content is within their offset, set alwaysTriggerOffsets
option to false
(view example).
Additional callbacks:
onInit
onOverflowY
onOverflowX
onOverflowYNone
onOverflowXNone
onUpdate
onImageLoad
onSelectorChange
Returning values
The script returns a number of values and objects related to scrollbar that you can use in your own functions
this
– the original element containing the scrollbar(s)this.mcs.content
– the original content wrapper as jquery objectthis.mcs.top
– content’s top position (pixels)this.mcs.left
– content’s left position (pixels)this.mcs.draggerTop
– scrollbar dragger’s top position (pixels)this.mcs.draggerLeft
– scrollbar dragger’s left position (pixels)this.mcs.topPct
– content vertical scrolling percentagethis.mcs.leftPct
– content horizontal scrolling percentagethis.mcs.direction
– content’s scrolling direction (y or x)
Plugin-specific jQuery expressions
$("#myID:mcsInView")
- Select element(s) in your content that are within scrollable viewport.
As condition:$("#myID").is(":mcsInView");
$(".content:mcsOverflow")
- Select overflowed element(s) with visible scrollbar.
As condition:$(".content").is(":mcsOverflow");
$("#myID:mcsInSight")
$("#myID:mcsInSight(exact)")
- Select element(s) in your content that are in view of the scrollable viewport. Using the
exact
parameter will include elements that have any part of them (even 1 pixel) in view of the scrollable viewport.
As condition:$("#myID").is(":mcsInSight");
,$("#myID").is(":mcsInSight(exact)");
Plugin dependencies & requirements
- jQuery version 1.6.0 or higher
- Mouse-wheel support
License
This work is released under the MIT License.
You are free to use, study, improve and modify it wherever and however you like.
https://opensource.org/licenses/MIT
Donating helps greatly in developing and updating free software and running this blog 🙂
Hi Malihu,
For some reason my parameters don’t seem to apply, I wrote:
$(window).load(function(){ $('.accordion_section_content').mCustomScrollbar({ scrollInertia: "0" }); });
Scrollbar work, but inertia remains the same. Also if I do:
$('.accordion_section_content').mCustomScrollbar({ scrollInertia: "0", autoHideScrollbar: true });
… the autoHideScrollbar also doesn’t work. Any idea why?
Any chance you added the class “mCustomScrollbar” to “.accordion_section_content” manually? If yes, remove the class as it adds the scrollbar with the default parameters (as described in “Initialize via HTML” section guide).
Yes I did manually add the class to each of the elements where I want the scrollbar, because if I don’t then I get no scrollbar at all. Any idea where the problem stems from?
Do you get any console errors? Can you send me a link or code?
Oooh yeah I had:
TypeError: $ is not a function $(window).load(function(){
I replaced “$” with “jQuery” and now it works! Not sure how it somehow worked despite the error though.
Thanks malihu.
Hi Malihu,
Should the scrollbar be auto-updated when the window height is increased?
I’m playing with your scrollbar and when I resize the window, the height of the div element with id mCSB_1 is not updated.
Do I have to manually call the scroll update?
Unless you’re using a very old version, the scrollbar updates itself by default. Have you set your elements height in percentages? Can you send me a link with your code?
Hi,
First of all, I apologise for my poor English.
Thanks for making such a great plugin.
It’s been helping me a bunch but there’s a problem I can’t figure out by myself as I’m new to this.
I’ll greatly appreciate it if you could help me out in your spare time.
The problem I have is
when I place scroll bar inside the main content or the wrapper so that it’s practically replacing the browser’s default scroll bar, scroll bar’s buttons won’t show even when I have scrollButtons option enabled. (It’s a vertical scroll bar)
Also, is there a way to move the scrollTools position to the left?
because right now, scrollbar has no gap between the edge of the browser window and the bar itself, and there’s a huge gap between the div box sitting at left side of the scroll bar and the scroll bar even though there’s no padding or margin set to the div.
Everything else is working perfectly.
Best regards
S.
Hello,
Can you make sure you have mCSB_buttons.png in the same directory as plugin’s CSS file? It’s the file holding the button arrow icons.
The scrollbar markup is contained in .mCSB_scrollTools element and its position is defined in jquery.mCustomScrollbar.css. More specifically, vertical scrollbar position is set in line 65. Changing the right value from 0 to e.g. 20px will move scrollbar 20 pixels to the left.
For further assistance I’d have to see your page (code or link).
Hi. Thank you for your great work. I am a beginner and I was hoping you could help for a moment. I would like to be able to click a link and then make the scrollbar stop at a specific spot. Whenever I try to use an
anchor with #certainlocation
the bar always scrolls to top.
Any example is appreciated. Thanks is advance.
Dave
Hello,
You’ll need to use plugin’s scrollTo method within a click event.
For example, assuming your HTML link is the following:
<a href="#my-element-id">Scroll to #my-element-id</a>
you could add a script in your page like this:
$("a[href*='#']").click(function(e){ e.preventDefault(); var target=$(this).attr("href"); $(selector).mCustomScrollbar("scrollTo", target); });
Does this help?
Edit: Note that selector should be the element you applied the scrollbar.
Yes thank you. It helped but I am still having some trouble. I want the target to be the value of the querystring item ABC…not sure how to do this:
$(“a”).click(function(e){
e.preventDefault();
var target= $.QueryString[“ABC”];
$(“.content”).mCustomScrollbar(“scrollTo”, target);
});
Thanks again.
Can’t really help with this. Maybe the following link helps(?)
http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
Hi. I don’t have a problem getting the querystring value into javascript…just not sure how to use it once I have it with the ScrollTomethod.Thanks again.
If “ABC” is an id inside your content you could do:
var target=$.QueryString["ABC"]; $(".content").mCustomScrollbar("scrollTo", "#"+target);
Hi,
thank you for your great work and your wonderful plugin.
I’ve tried to implement it to my current project, and it works like a charm, except for one thing. When trying to “grab” the scrollbar with the mouse, the middle area of the scrollbar is not “grabbable”. I’ve uploaded a screenshot here:
http://www.falkenbach-rpg.de/screenshot.jpg
to show what i mean.
I implemented the scrollbar using the following code:
<div class="charsheetmidright mCustomScrollbar" data-mcs-theme="3d-dark" id="skillsheet">
I’d be happy if you could help me out.
Best regards
Andreas
Hi,
This is weird… Does this happen on any of the plugin demos/examples as well?
Any chance an element with a “high” z-index value overlaps the scrollbar in your layout?
Can you send me a link or some test HTML to check it?
Yes, of course. Try this page:
http://falkenbach-rpg.de/register.php
While there are elements with higher z elements on the page, none of them should overlap the bar.
In your stylesheet.css in line 67 you have:
div{ z-index: 2; }
I don’t know why this rule is set but if you remove it fixes the issue.
If for some reason you want to keep the above, you can specifically set the scrollbar dragger to a higher z-index like this:
.mCustomScrollbar .mCSB_scrollTools .mCSB_dragger{ z-index: 3; }
Thanks a lot! That did in fact save me. I like to give my elements a z value to ensure the layout stays the same throughout all browsers. the divs are the element with the actual content, so they usually have the highest z.
Thanks again for doing so much support for your tool. i’ll not only consider, but i am honestly planing to donate a bit start of next month. Because you rock.
Thank you 🙂
I try to provide support as much as possible although sometimes I get overwhelmed!
hi there, great work with this script! i’m very bad with javascript but you made this easy to understand.
i’ve encountered a problem though- the script does not seem to work when max-height has a calc() value! why is this? when i set the max-height to a px value, the scrollbar appears, but when i set it back to the calc() value, the browser’s default scrollbar apepars instead.
here is the code in question.
#stats { position:absolute; max-height:calc(100% - 390px); width:290px; left:5px; bottom:15px; overflow:auto; font:12px consolas; }
Hello,
The plugin currently does not support CSS calc() values for max-height. I’ll try to add support for it on the next version. Thanks for the feedback!
hyy,
how to set .mCSB_dragger offset custom value because i have issue in custom offset set…so plz do you know me how to set custom offset to .mCSB_dragger??
Can you send a screenshot of the offset you want?
How to send screenshot?
How to update scrollAmount in window resize ??
how to update scrollAmount on window resize?
How can I change the colour of the dragger bar and dragger rail of the ’rounded-dark’ theme by giving my own custom theme name?
For example, I want to do something like this but use the ’rounded-dark’ properties:
$('.content').mCustomScrollbar({ theme:"my-theme", scrollButtons:{ enable:false } });
To create a new theme out of “rounded-dark” you can do the following:
1. Open jquery.mCustomScrollbar.css.
2. Find and copy .mCS-rounded-dark CSS rules to another stylesheet or style tag.
3. Change “.mCS-rounded-dark” to “.mCS-my-theme” in all rules.
4. Change the colors/backgrounds. For reference, these are defined in lines 705, 708, 710, 713 and 713 of jquery.mCustomScrollbar.css.
Thank you.
Great work on this! Love everything about it!
I got it working and had a quick question. I had previously defined a class for the divs that I am using these scrollbars on. I would like to define a set height and background (transback is what I was using). Should I just do it in the HTML or is there an area in the CSS that I can make these edits?
Thanks again for an awesome piece of work!
You could do it in jquery.mCustomScrollbar.css but the best way is to do it on your HTML/CSS file, so you can easily update jquery.mCustomScrollbar.css to a newer version if needed.
If you still like to edit jquery.mCustomScrollbar.css you can see the actual plugin markup in the following URL and edit the CSS rules accordingly:
http://manos.malihu.gr/wp-content/uploads/2012/07/scrollbar_layout.png
Hi,
I am getting some weird behavior while writing for horizontal scroll (axis: “yx”).
the size of horizontal scroll track and scroll bar is very small (approx 30px) its not expanding upto entire page body.
The vertical scroll working properly in both cases, with/without horizontal scroll bar.
Can you send a link so I can check it?
its not deployed on any server…. I can send you the screen shot
Maybe you need to add a width value (e.g. width: 100%;) to your element (e.g. body)? Can you replicate the issue on a test page and send it to me via email?
i need a scroll bar that should appear only when the content exeeds some height the content comes into the box dynamically. the height of the div should not be fixed . three div oone below the other . box 1 , box2, box 3 ,
scroll for all three shouls apper if content comes above heigh: 400px.
the height of the box is not fixed . if there is only some content in box1 and no content in 2 and little in 3 . all 3 should appen one below other without fixed height for each
Give your elements a max-height value of 400px, e.g.:
.box-1, .box-2, .box-3{ height: auto; max-height: 400px; }
Can I set the configuration via HTML tags?
some thing like,
<div " id="test" class="mCustomScrollbar" data-mcs-theme="dark-thick" data-mcs-scrollInertia="0" >
because I want disable scrollInertia at beginning.
Thanks
No. You can only change it via js:
//when initializing $(selector).mCustomScrollbar({ scrollInertia:0 }); //after initialization $(selector).data("mCS").opt.scrollInertia=0;
You may also set it to zero as the default value, e.g.:
$(document).ready(function(){ $.mCustomScrollbar.defaults.scrollInertia=0; });
What do you want to do?
Thanks for the reply,
nothing special for my request, previous I initialed the scroll bar via HTML tag, just want put them in the same style.
By the way, there is a big gap between the context and the scroll bar by default, actually in my case I don’t want that gap, after study, seems overriding your css is the only way to remove it,
.mCSB_inside > .mCSB_container{ margin-right: 0px; }
is there an official way to remove it? or a parameter to disable the gap ‘issue’ while initialing?
Many thanks.
No. I’ve left (almost) all scrollbar design to be done via CSS so the user can do whatever he likes without restrictions.
One of the option parameters that might also work for what you need is scrollbarPosition
Is it possible to *completely* disable to the easing when approaching the top or bottom of a mCustomScrollbar-enabled container? Thanks in advance.
You can access and modify the scrollInertia option value (which defines the scrolling animation easing) like this:
//get scrollInertia (default value is 950) $(selector).data("mCS").opt.scrollInertia; //set scrollInertia to zero $(selector).data("mCS").opt.scrollInertia=0;
Maybe you could you use the above inside onTotalScroll and onTotalScrollBack callbacks to do what you need?
Hello Mailhu,
Can you please help me to implement below requirement:
When user try change the ordinal then the vertical scroll bar should also be in sink with the dragged form.
Thanks
Amit
Hello,
I can’t really tell what you’re trying to do… Can you send me a link or code?
(translation)
Hello,
First of all, I beg you to excuse my english …
Looking for a powerful CCS library to manage Scrollbar, I just discovered your achievement.
Any congratulations, efficient, flexible code, and extremely functional, which I plan operation and integration in my WebAPI underway.
However, I have a problem of implementation in a very specific context: scroll the contents of an iframe.
In this iFrame, will be responsible different URL in the format “smartphone”. (Chooses a select user).
A very variable navigation, according to pages, the scroll length should be regularly updated. (though I thought I see this update).
However, there is the aspect of the problem, the scrollbar appears to target the iFrame itself, but not the content of the url loaded in the iFrame.
Suddenly, the scroll does not really work, and its update is not performed when navigating within the mobile site displayed in the iFrame.
In addition, it is essential to place a in the so that the scrollBar appears ??
Well, I hope I was clear enough …
Along href=”http://maquette.iqrterra.fr/malihuScrollbar/examples/exemple_iqr.html” here on the model link implementing the scrollbar along the iFrame .
Thanking you in advance.
Denis
> ——————-
(original)
Bonjour,
Tout d’abord, je vous prie de bien vouloir excuser mon anglais …
Recherchant une bibliothèque CCS performante pour gérer les Scrollbar, je viens de découvrir votre réalisation.
Toute mes félicitations, un code efficace, souple, et extrèmement fonctionnel, dont j’envisage son exploitation et intégration dans ma webAPI en cours.
Cependant, je rencontre un problème d’implémentation dans un contexte bien spécifique : le scroll du contenu d’un iFrame.
Dans cet iFrame, sera chargé différente url au format “smartphone”. (Choisit dans un select par l’utilisateur).
Une navigation très variable, selon les pages, dont la longueur du scroll doit régulierement être mis à jour. (quoique j’ai cru constater cette mise à jour).
Cependant, là est l’aspect du problème, le scrollbar semble cibler l’iFrame proprement dit, mais pas le contenu de l’url chargé dans l’iFrame.
Du coup, le scroll ne fonctionne pas vraiment, et sa mise à jour n’est pas effectué lors de la navigation au sein du site mobile affiché dans l’iFrame.
De plus, il faut impérativement placer une balise dans la afin que la scrollBar s’affiche ??
Voilà, j’espère avoir été suffisamment explicite …
Je joins ici le lien de la maquette implémentant le scrollbar en bordure de l’iFrame.
Vous remerciant par avance.
Denis
Hello,
I think you should remove:
#iframe-container iframe{ height: 100%; }
from your CSS, as the iframe must have the (correct) height set in its attribute (416 pixels).
Re: Hello,
Thank you for your quick response …
I just deleted height of the iframe iframe id-container,
but to no avail?
The problem must come from elsewhere
Thank you again to get involved as well.
to be continued
Denis
>—–
Re:Bonjour,
Merci pour votre réponse rapide …
Je viens de supprimer height de l’id iframe-container iframe,
mais sans effet !?
Le probleme doit venir d’ailleurs
Merci encore de vous impliquer ainsi.
A suivre
Denis
You need to adjust the height of your #iframe-container element. Now it is 694px which is greater than the height (416px) of the iframe, so no scrollbar is needed/visible. Just change 694px to something less than 416px (e.g. 300px).
Normally, you’ll also need to change the height attribute of your iframe element each time you load a new one.
Re:
You mean there is no analysis of the height of the new page before it is displayed in the iframe.
The code will have to calculate the height and update server side before the client side display?
Also I see meet another security problem, to the extent the URL of my iFrame call the address of another domain, although hosted on the same server.
(Unsafe JavaScript Attempt to access frame with URL http://www.tagiqr.fr/tagiqr/page_int2.php from frame with URL http://maquette.iqrterra.fr/malihuScrollbar/examples/exemple_iqr.html. Domains, protocols and ports must match.)
Either I clone the mobile site code in an adjacent file, or I find a setting in my server to resolve the upstream security problem.
I then would resume work setting ds scrollbar.
Thank you very much
Denis
Yes. The custom scrollbar script cannot modify the content within an iframe from a parent document.
Also when parent window and iframe are different domains, you’ll get a “Unsafe JavaScript Attempt”, meaning that mouse-wheel won’t work when hovering over the iframe (this is a browser security feature).
Hi,
Firstly, thanks for this very nice plugin.
I wanted to ask how can i change in the hover state the height of the scrollbar, but when I click it to drag it, the height should be at the default height. Do you have any ideas about that?
Thanks in advance.
Hi,
Do you mean the scrollbar dragger alone or the scrollbar dragger, rail, buttons etc.? On vertical or horizontal scrollbar?
Changing scrollbar dragger’s height on vertical scrollbar would feel a bit weird and probably not user-friendly…
Hello,
I’ve just installed the latest version of your custom scrollbar (I had a version from way back that needed to be updated) but I’m having a problem with it. There seems to be a “no man’s land” in terms of content length where the dragger shows up (I have the drag rail set always show and the dragger set to a specific height) but it won’t scroll using the mouse. I can grab it with the mouse and drag it up and down, but that’s a crappy experience when for other content I can use the mouse. If I decrease content just enough, the dragger disappears properly and if I increase content just enough, then the scrolling works properly.
Here’s the call that I make in my code:
<script> (function($){ $(window).load(function(){ $(".scroll_left_side").mCustomScrollbar({ theme:"dark", alwaysShowScrollbar: 1, autoDraggerLength: false, autoHideScrollbar: false, scrollButtons:{ enable: 0 } }); }); })(jQuery); </script>
Here’s the CSS for my scroll block:
.scroll_left_side{ height: 450px; margin-top: -333px; margin-left: 40px; overflow: auto; width: 441px; font-family: verdana, arial, helvetica, sans-serif; font-size: 11px; color: grey; line-height: 16px; }
And here’s the modification I made to jquery.mCustomScrollbar.css (at the very bottom of the file):
I’ve tried removing these changes just to see if it matters and it doesn’t appear to. The same behavior occurs.
#mCSB_1_scrollbar_vertical .mCSB_dragger{ height: 30px; width: 75%; margin-left: 2px; background-color: #fab751; background-color: rgba(250,183,81,0.75); -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px; } #mCSB_1_scrollbar_vertical .mCSB_dragger .mCSB_dragger_bar{ width: 1px; background-color: rgba(0,0,0,0.15); } #mCSB_2_scrollbar_vertical .mCSB_dragger{ height: 30px; width: 75%; margin-left: 2px; background-color: #fab751; background-color: rgba(250,183,81,0.75); -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px; } #mCSB_2_scrollbar_vertical .mCSB_dragger .mCSB_dragger_bar{ width: 1px; background-color: rgba(0,0,0,0.15); }
Hi,
I just made a test page with your CSS and scrollbar options and didn’t get any issues. Can you send me by email your page(s)/files? This might be a CSS issue but I can’t be sure.
Sure. Here are some links:
This works: http://www.echoflyfishing.com/2015/html/bios.php?bio_id=34&bio_type=prostaff
This doesn’t: http://www.echoflyfishing.com/2015/html/bios.php?bio_id=47&bio_type=prostaff
Same exact code, just different content.
Another example:
This works: http://www.echoflyfishing.com/2015/html/warranty.php
This doesn’t: http://www.echoflyfishing.com/2015/html/about.php
Again, exact same code but different amounts of content.
Any help would be appreciated. Thanks!
Maybe I didn’t understand the issue you’re having but all links seem to work as expected.
When content is not long enough (e.g. in both of your first links) scrollbar dragger is not visible and there’s nothing to scroll. Your second links (warranty.php and about.php) have long-enough content so scrollbar is visible and scrolling is working (via mousewheel, drag etc.).
I’ve tested it with latest Chrome, Firefox and IE. Does this happen on a particular/other browser? Isn’t this the behavior you’re expecting?
For the first two links, the second link doesn’t scroll using the mouse. I have to drag the dragger. The first link works fine.
Same with “about” vs. “warranty”. On the ABOUT page, I can’t scroll using a mouse. On the WARRANTY page, I can.
I’ve tried Chrome, Firefox and Safari (I’m on a Mac Mini using OS X 10.10.1) and get the same results in all three browsers.
FYI: I just tried it on my MacBook Air and MacBook Pro and got exactly the same results. First link works. Second link doesn’t.
This must be an issue with magic mouse/macbook trackpad.
I just tested the links on the following and scrolling works on all links:
1. OSX 10.9/Safari 7 virtual machine with a “standard” mouse with wheel.
2. iPad 2 (iOS 8.1.2).
3. Windows laptop with trackpad.
Can you try changing the values of either:
mouseWheel:{ scrollAmount } mouseWheel:{ deltaFactor } mouseWheel:{ normalizeDelta }
and see if results are different?
Awesome! That seems to have done the trick.
Changed my call to the following:
<script> (function($){ $(window).load(function(){ $(".scroll_left_side").mCustomScrollbar({ theme:"dark", alwaysShowScrollbar: 1, autoDraggerLength: false, scrollButtons:{ enable: 0 }, mouseWheel:{ scrollAmount: 150, deltaFactor: 150, normalizeDelta: 1 } }); }); })(jQuery); </script> <script> (function($){ $(window).load(function(){ $(".scroll_right_side").mCustomScrollbar({ theme:"dark", alwaysShowScrollbar: 1, autoDraggerLength: false, scrollButtons:{ enable: 0 }, mouseWheel:{ scrollAmount: 150, deltaFactor: 150, normalizeDelta: 1 } }); }); })(jQuery); </script>
I also increased the size of the scroller container slightly and that seemed to resolve the problem with the draggers showing up for text that was right on the edge of being too large for the container.
I’ll keep testing the rest of the pages now and see if I come across anything else. Thanks a lot for your help!
Hello,
Thx for great work but when i used (‘html’).myCustomScroll…. this ‘local scroll’ function doesnt work:
$(‘a.bind’).on(‘click’,function(){
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $(‘[name=’ + this.hash.slice(1) +’]’);
if (target.length) {
$(‘html,body’).animate({
scrollTop: target.offset().top
}, 1000);
return false;
}
}
});
Can u tell me how to fix it ?
jQuery scrollTop() works only with browser’s native scrollbar.
The plugin provides the scrollTo method which you can use to scroll to anywhere within your content (method guide and examples).
Thank you so much. U are the best due!!
Btw. 4 anyone who wants local_scroll with html custom scrollbar i used this function:
function local_scroll(){
$(‘a.bind’).on(‘click’,function(){
var local_scroll = $(this).attr(‘href’);
$(‘html’).mCustomScrollbar(“scrollTo”,local_scroll);
return false;
});
}
$(local_scroll).jQuery;
Hi,
I am working on automatically updated content using mcustomscrollbar.
However, when the content is too short and the scrollbars are removed, it is not scrolled to the top and some content becomes unreachable.
The callbacks onUpdate or onOverflowYNone do not seem to work.
I have a total of three of these boxes with different class names and configured individually.
Thanks in advance,
Max
Can you send me a link or your code? How do you update the content? Do you add/remove content from within .mCSB_container element?
This is the main code btw:
$(selector).mCustomScrollbar({
theme: (G.is(theme) ? theme : “dark-3”),
scrollInertia: 150,
advanced:{
updateOnContentResize: true,
updateOnImageLoad: true,
updateOnSelectorChange: true
},
callbacks:{
onOverflowYNone: function() {
console.log(“Vertical scrolling is not required”);
},
onScroll: function() {
console.log(this.mcs.topPct);
},
onUpdate: function() {
console.log(“update”);
},
onSelectorChange:function(){
console.log(“Scrollbars updated”);
}
},
live: true,
scrollButtons:{
enable: false
}
});
I added this to restore the content when the scrollbars are removed, it is called every time the content is updated, but does not work great:
setTimeout(function() {
if($(‘.HomeAllergies .mCSB_scrollTools_vertical’).css(“display”)==”none”) {
$(‘.HomeAllergies .mCSB_container’).css(“top”,”0px”);
}
}, 100);
Yes, the content is placed in .mCSB_container, by the following code:
if($(“.HomeAllergies .mCSB_container”).length) exists = ‘ .mCSB_container’;
$(‘.HomeAllergies’+exists).html(content);
Can you remove the updateOnSelectorChange option (normally you don’t need it) and setTimeout function?
Also, can you inspect your element with developer tools to see if a)you get any console errors and b)if there’s a CSS property causing your inner content not sticking to the top?
There are no console error or ignored CSS for top fixation. The top position is defined in the element.
I added those lines in an attempt to fix the error and the setTimeout sortof worked.
After removing those lines again I now changed line 56 of the CSS to:
.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{ margin-right: 0; top: 0 !important; } /* non-visible scrollbar */
and now it sticks to the top.
Thanks for helping!
Hi,
I want to know how i can make it responsive for all devices. i have vertical scroller on my site, i want to make it horizontal on small screens. How i can?
You’ll need to use 2-axis scrollbars and change your element’s width/height according to screen size in your CSS media queries.
You can check/view the source of the following example which is similar to what you want (it switches from horizontal to vertical):
http://manos.malihu.gr/repository/custom-scrollbar/tests/yx-axis-with-media-queries/
Hi,
first off, excellent script! Congrats!
My question is, can I place two horizontal scroll bars, one above the content to be scrolled and one below it?
They would obviously need to be synced so that when you scroll one the other one is scrolled as well.
There are cases where my content is too big in terms of height and placing two scroll bars would make it easier for the user to scroll whether they are at the top or the bottom of the page
cheers
Hello and thanks for your comments,
You cannot have 2 same axis scrollbars on a single element.
The only solutions I can think of to help users with the long element are:
a)Give your element a max-height and add both vertical and horizontal scrollbars on it.
b)Have the normal horizontal scrollbar on bottom and create 2 additional buttons on top that will also scroll content horizontally using plugin’s scrollTo method.
Hey there,
I added your scrollbar to a div with the following CSS:
#div-for custom-scroll { position: relative; float: left; width: 92%; height: 100%; overflow-x: auto; overflow-y: hidden; }
Configured the scolling using this code:
$('#div-for-custom-scroll').mCustomScrollbar({ theme: "minimal", axis: "x" });
While the scolling works perfectly, the size of the container is disturbed. Any ideas as to why this would happen?
Can’t really say. Can you send me a link?
Hi!
Thanx for an awesome script!
I have 2 issues with the script. The first one when page loads it seems to show the entire content first quickly then hide it.
It can be reproduced by refreshing the browser .
Second issue.
I can’t get the horizontal scroll to work. I have been trying for hours without success.
Please help.
The website can be found at: http://dev.cmok.ba/cm
Cheerz
Hello,
In your markup you probably need to set autoExpandHorizontalScroll to true. For example:
$("#content-1").mCustomScrollbar({ scrollButtons:{enable:true}, axis: "x", theme:"rounded", setWidth: "100%", setHeight: "70px", scrollbarPosition: "outside" advanced:{ autoExpandHorizontalScroll: true } });
To hide content while page is loading you should set your element’s CSS overflow property to either hidden or auto.
Hi, I want to detect when the scroll is near the end so I can start loading the pagination results before the user request for them.
Greetings.
Hi,
Using plugin’s callbacks you can get the scrolling position and call your own functions. Please see User-defined callbacks for more info.
Ok, thank you very much.
Greetings.
how do i implement scroll bar with tablesorter with filter option
Please send more info, code and/or links to what you need to do, so I can provide help.
hi.
Am trying connect mCustomScrollbar with jQuery autocomplete.
open: function(event, ui) { $(" .ui-autocomplete").mCustomScrollbar(); }
I use code below and when I stat autocomplete first time is OK, but on second time I get default scrollbar.
Can г help me?
Hi,
The archive contains the example jquery_ui_autocomplete_example.html which does exactly what you need. Please see/study the script in the example to see how to use plugin’s destroy method within jQuery UI autocomplete events.
You can also see the example in action here:
http://manos.malihu.gr/repository/custom-scrollbar/demo/examples/jquery_ui_autocomplete_example.html
Hi Malihu, I have a problem with a horizontal scroller.
ONLY in windows phone 8/8.1 the scroller area not swipe left nor right unless using scrollbar (that’s not confortable) and also block the natural page scrolling so you can’t go up and down the page. you’ve noticed something like that before or someone have found a solution?
on my mac, and my ipad all works right, on my wp8.1 phone it breaks.
by the way, great script!
Yes this is a known issue with the latest version and will be fixed on next update (asap). In the meantime, you could test the previous plugin versions (e.g. 3.0.5 or 3.0.4) which should work on Windows Phone.
Thanks, man.
Very fast reply!
I was experiencing the same problem on my HP TouchSmart Laptop using:
Windows 8
IE 11
Custom Scroll 3.0.7
Reverting back to Custom Scroll 3.0.5 fixed the problem. When will a fix be available for this issue? Great plugin!!
Version 3.0.7 should not have this issue. Are you sure you weren’t using version 3.0.6?
Hi,
i would like to add some margin from scrollTo element and container top so it is not attached on the container top.
Do you know how i can add it?
Thanks in advance
Hi,
i solved calculating the element offset top relative to their scroll container and adding a top distance in this way:
var valueToScroll = $(ELEMENT).offset().top - $(SCROLL-CONTAINER).offset().top + DISTANCE(integer));
I think that would be a good idea integrate your scrollTo function with an option to set a distance (left,right,top,bottom) to apply to the element.
Regards
G.
Hi,
I was wondering if it was possible to overlay the scroll buttons over the actual content – so basically I am looking for something like the “rounded-dots” theme, but the mcsb buttons would be centered over the content (top and button).
Thanks a bunch for this wonderful plugin!
You can style your buttons however you like via CSS. For example you can do:
.mCSB_buttonUp, .mCSB_buttonDown{ left: -200px; }
or
.mCSB_buttonUp, .mCSB_buttonDown{ margin-left: -200px; }
You can add the CSS rules directly in jquery.mCustomScrollbar.css or overwrite the styling in another stylesheet, providing more specific selectors. For example:
#my-element-id .mCSB_scrollTools_vertical .mCSB_buttonUp, #my-element-id .mCSB_scrollTools_vertical .mCSB_buttonDown{ left: -200px; }
Hi,
I am using this scroll bar in a web page, actually the web application is like pdf format , there are about three hundreds pages when i am at the very bottom its scroll the elements very fast is there any way to make them slow when it is at the bottom.
I think there is any interval problem i am facing , i have used this plugin in various projects it is awesome but now i am having problem
Thanks
Shaban
Hi,
Can you send me a link where such issue occurs?