This website uses cookies to personalise ads and to analyse traffic ok
web design

jQuery custom content scroller

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

When upgrading from version 2.x to 3.x it’s important to use version 3 CSS and .png files. Version 3 is backwards compatible but it’s also a huge overhaul. One significant change is that you don’t need to call the update method manually (the script does it automatically). For more info see changelog.

Version 2 is still maintained and updated here.


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).

Instead of hosting the plugin files on your web server, you can load them directly from a CDN like jsdelivr, Github etc.

  • jsdelivr versioned/minified
    • //cdn.jsdelivr.net/jquery.mcustomscrollbar/3.0.6/jquery.mCustomScrollbar.concat.min.js
    • //cdn.jsdelivr.net/jquery.mcustomscrollbar/3.0.6/jquery.mCustomScrollbar.min.css
    • //cdn.jsdelivr.net/jquery.mcustomscrollbar/3.0.6/mCSB_buttons.png
  • Github latest/minified
    • //malihu.github.io/custom-scrollbar/jquery.mCustomScrollbar.concat.min.js
    • //malihu.github.io/custom-scrollbar/jquery.mCustomScrollbar.min.css
    • //malihu.github.io/custom-scrollbar/mCSB_buttons.png


HTML

Include jquery.mCustomScrollbar.css in the head tag your HTML document (more info)

jquery.mCustomScrollbar.css contains the styling of the custom scrollbar and themes. It should normally be included in the head tag of your html (typically before any script tags). If you wish to reduce http requests and/or have all your website stylesheet in a single file, you should move/copy scrollbars styling in your main CSS document.

mCSB_buttons.png contains all the button arrows (up, down, left and right) as image sprites for all scrollbar themes. The plugin archive contains the PSD source (source-files/mCSB_buttons.psd) so you can change them or add your own. This file should be in the same directory with plugin stylesheet.


<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

Some frameworks and CMS include jQuery library in the head tag to make sure it’s loaded when other scripts request it. Usually, including .js files on the bottom of the HTML document (just before the closing body tag) is recommended for better performance. In any case, jQuery must be included first, before plugin scripts.


<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>

more info

The code is wrapped in (function($){ ... })(jQuery);. This ensures no conflict between jQuery and other libraries using $ shortcut (see Avoiding Conflicts with Other Libraries for more info). The plugin function is called in $(window).on("load") so it executes after all page elements (like images) are loaded.

You can change the function selector ".content" to any selector you want (an element id, class name, js variable etc.). For instance, if you want custom scrollbars to apply on the element with id content-1, you simply do:

$("#content-1").mCustomScrollbar();

You may also have multiple selectors by inserting comma separated values

$(".content,#content-1").mCustomScrollbar();

The above code adds custom scrollbars to a)every element with class name content and b)the element with id content-1.

Additionally, you may want to call mCustomScrollbar multiple times within a page in order to set different options (configuration and option parameters explained below) for each selector

<script>
  (function($){
    $(window).on("load",function(){
      $("#vertical-content").mCustomScrollbar({
        theme:"light-3",
        scrollButtons:{
          enable:true
        }
      });
      $("#horizontal-content").mCustomScrollbar({
        axis:"x",
        theme:"3d"
      });
    });
  })(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 scrollbar
  • axis: "yx" – vertical and horizontal scrollbars
scrollbarPosition: "string"
Set the position of scrollbar in relation to content.
Available values: "inside", "outside".
Setting scrollbarPosition: "inside" (default) makes scrollbar appear inside the element. Setting scrollbarPosition: "outside" makes scrollbar appear outside the element. Note that setting the value to "outside" requires your element (or parent elements) to have CSS position: 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 to 0 to disable.
autoDraggerLength: boolean
Enable or disable auto-adjusting scrollbar dragger length in relation to scrolling amount (same bahavior with browser’s native scrollbar).
Set autoDraggerLength: false when you want your scrollbar to (always) have a fixed size.
autoHideScrollbar: boolean
Enable or disable auto-hiding the scrollbar when inactive.
Setting autoHideScrollbar: 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 visible
  • alwaysShowScrollbar: 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.
Set axis: "y" (default) for vertical or axis: "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, set contentTouchScroll: 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 to true, content will expand horizontally to accommodate any floated/inline-block elements.
Setting its value to 2 (integer) forces the non scrollHeight/scrollWidth method. A value of 3 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, set autoScrollOnFocus: 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 be true (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 is auto which triggers the function only on "x" and "yx" axis (if needed).
The value should be true 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, setting updateOnSelectorChange: "ul li" will update scrollbars each time list-items inside the element are changed.
Setting the value to true, will update scrollbars each time any element is changed.
To disable (default) set to false.
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, setting onTotalScrollOffset: 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, setting onTotalScrollBackOffset: 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.
Set alwaysTriggerOffsets: 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.
Set live: 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, set live: "off" and "on" respectively.
You can also tell the script to disable live option after the first invocation by setting live: "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.

view examples

/* initialize plugin with auto-update options disabled */
$(selector).mCustomScrollbar({
  advanced:{
    updateOnContentResize: false,
    updateOnImageLoad: false
  }
});

/* at some point in your js script/code update scrollbar manually */
$(selector).mCustomScrollbar("update");

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"
  • integer
    • e.g. number of pixels: 100
  • [array]
    • e.g. different y/x position: [100,50]
  • object/function
    • e.g. jQuery object: $("#element-id")
    • e.g. js object: document.getelementbyid("element-id")
    • e.g. function: function(){ return 100; }

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

view examples

Scroll to element with id “#el-1″

$(selector).mCustomScrollbar("scrollTo","#el-1");

Scroll to top

$(selector).mCustomScrollbar("scrollTo","top");

Scroll by 100 pixels down or right

var val=100;
$(selector).mCustomScrollbar("scrollTo","-="+val);

Scroll by 100 pixels up or left

$(selector).mCustomScrollbar("scrollTo","+=100");

Scroll by 100 pixels down and by 50 pixels right

$(selector).mCustomScrollbar("scrollTo",["-=100","-=50"]);

Scroll to the fifth paragraph

$(selector).mCustomScrollbar("scrollTo",$("p:eq(4)"));

Scroll to the last element within your content

$(selector).mCustomScrollbar("scrollTo","last");

Scroll to some variable value

var val=document.getelementbyid("element-id");
$(selector).mCustomScrollbar("scrollTo",val);

Scroll to 300 pixels

$(selector).mCustomScrollbar("scrollTo",300);

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);

view examples

/* initialize plugin */
$(selector).mCustomScrollbar();

/* at some point in your js script/code disable scrollbar */
$(selector).mCustomScrollbar("disable");

/* re-enable scrollbar as needed */
$(selector).mCustomScrollbar("update");

destroy

Usage $(selector).mCustomScrollbar("destroy");

Calling destroy method will completely remove the custom scrollbar and return the element to its original state (demo).

view examples

/* initialize plugin */
$(selector).mCustomScrollbar();

/* at some point in your js script/code destroy scrollbar */
$(selector).mCustomScrollbar("destroy");

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"
});

View all ready-to-use themes

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; }

Custom scrollbar layout

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 starts
  • whileScrolling – triggers while scroll event is running
  • onScroll – triggers when a scroll event completes
  • onTotalScroll – triggers when content has scrolled all the way to bottom or right
  • onTotalScrollBack – 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).

The following will trigger the callback function when content has scrolled to bottom minus 100 pixels

$(".content").mCustomScrollbar({
    callbacks:{
        onTotalScroll:function(){
            console.log("scrolled to bottom");
        },
    onTotalScrollOffset:100
    }
});

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).

$(".content").mCustomScrollbar({
    callbacks:{
        onTotalScroll:function(){
            console.log("scrolled to bottom");
        },
    onTotalScrollOffset:100,
    alwaysTriggerOffsets:false
    }
});

Additional callbacks:

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 object
  • this.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 percentage
  • this.mcs.leftPct – content horizontal scrolling percentage
  • this.mcs.direction – content’s scrolling direction (y or x)

view examples

Load more content when scrolled to bottom

$(selector).mCustomScrollbar({
    callbacks:{
        onTotalScroll:function(){
            this.mcs.content.append("...");
        }
    }
});

Run code when at least half of the content is scrolled

$(selector).mCustomScrollbar({
    callbacks:{
        whileScrolling:function(){
            var pct=this.mcs.topPct;
            if(pct>=50){
              /* do something... */
            }
        }
    }
});

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

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

Pages: 1 2 3 4


5,630 Comments

Post a comment

Comments pages: 1 48 49 50 51 52 85

  1. agustin
    Posted on June 23, 2014 at 03:13 Permalink

    hello, very good library, only I have a problem, I would like to know how to apply it to elements created at runtime.

    pd: sorry for my English, I speak Spanish. regards

    Reply
    • Arvin
      Posted on June 26, 2014 at 15:21 Permalink

      $(“#yourcontainer’s id here”).mCustomscrollbar();

      Reply
  2. Gianluca
    Posted on June 20, 2014 at 13:27 Permalink

    The plugin is compatible with DataTables (plugin Jquery)? Pagination is not working.
    thanks

    Reply
  3. Alda
    Posted on June 20, 2014 at 09:54 Permalink

    Hi,

    I am very fond of this plugin, it’s maybe the simplest and best I’ve seen so far. Great job on this!

    But I have a problem though and maybe you know how I can apply a quick fix on this:
    When dragging the scroll up and down, it’s fine, as long as I don’t drag the mouse outside the window.
    If I release the click after dragging the scrollbar outside the window, the scroll stays locked on the cursor when hovering anywhere the page.
    Is there any way to fix this?

    Thank you in advance 🙂

    Reply
  4. Carlos
    Posted on June 19, 2014 at 12:23 Permalink

    Everything works fine but is there an option to make zoom with the mouse wheel? When I press CTRL + move mouse wheel I only get to scroll. Just when the scrollbar is in top or bottom the mouse wheel is activated

    Reply
  5. murtaza
    Posted on June 19, 2014 at 09:27 Permalink

    Vertical scroll bar does not stop scrolling after the mouse button is released

    Reply
    • murtaza
      Posted on June 19, 2014 at 09:30 Permalink

      The scroll bar synchronizes with the the movement of the mouse?
      Ian newbie to jquery. any solution ?
      Thank you.

      Reply
  6. devon
    Posted on June 18, 2014 at 20:12 Permalink

    Does anyone know a lightweight scroller that works on all browsers? Most of these don’t work on IE.

    Reply
    • malihu
      Posted on June 26, 2014 at 20:00 Permalink

      Which IE? This scrollbar works on IE8+ and IE mobile.

      Reply
  7. Victor
    Posted on June 18, 2014 at 15:16 Permalink

    This is very helful plugin. Thank you very much! 🙂

    Reply
  8. Ashu
    Posted on June 18, 2014 at 10:42 Permalink

    Well i am having a lot of problem in IE mobile. It doesnt work there.
    It works when the actual scroll bar is dragged but doesn’t work when content is swiped. It might need a small fix but i am desperately i need of it. Other wise i will have to remove it from other devices/phones also where it is working.

    Reply
    • malihu
      Posted on June 26, 2014 at 20:01 Permalink

      Do you use the latest version (3.0.2)?

      Reply
  9. Mahesh
    Posted on June 18, 2014 at 09:46 Permalink

    HI, I have used customeScroll for my Div tag which contains elements. It’s working good with the on touch scrollbar and up/down button clicks. But I am not able to scroll using on touch of DIV area. Can any one tel how to do this.

    Reply
  10. Paul
    Posted on June 17, 2014 at 06:16 Permalink

    Could someone tell me the best way of detecting whether or not the scrollbar has been activated on any given scrollable element, using javascript, jquery, or perhaps there’s a built-in Malihi Custom Scrollbar function? I’d like to modify some HTML element style properties only when/if the scrollbar is visible/active.
    I’m loving the custom scrollbar plugin, BTW. It’s really well thought out and, although my site is not live yet, all my tests seem to indicate that the custom scrollbars work perfectly. Great work and thank you!

    Reply
    • malihu
      Posted on June 26, 2014 at 20:07 Permalink

      The element with the scrollbar applied will have the class mCustomScrollbar. It’ll also have the jQuery data object $.data("mCS")

      Reply
  11. Kiowa Kidd
    Posted on June 14, 2014 at 23:06 Permalink

    Highlight :active buttons
    —————————

    Hi, Malihu –

    I found that the :active Up/Down buttons in the “Dark-2” theme can be highlighted (in effect) by giving them
    the property “background-color: rgba(255,0,0,0.9);” in the .CSS file.

    That puts a rectangle of red around a dark arrow in IE, Chrome, Opera, and Safari when those
    buttons are clicked (without having to Photoshop their images in the .PSD file).

    It has no effect, though, in Firefox. Do you know of any CSS tricks to make Firefox work the same way?

    Kiowa

    Reply
  12. Sumit
    Posted on June 11, 2014 at 16:53 Permalink

    Great work. I wonder if these two alterations are possible.

    1. stick the head (content h2) on the top (EX:- yahoo)
    2. scrollbar scroll relatively with the whole page (EX:- yahoo)

    Reply
  13. David
    Posted on June 11, 2014 at 14:52 Permalink

    Hi Malihu,

    First of all, congratulations for this plugin. It’s a very good plugin !

    I encountered one problem: I want to use the theme ‘minimal-dark’, but I want to set autoHideScrollbar option to ‘false’. But the theme always overwrite my conf.

    Do you have a solution for this case ?

    Thank you,

    Reply
    • malihu
      Posted on June 12, 2014 at 01:17 Permalink

      Hello,

      “minimal” ready-to-use themes are a bit special and do overwrite the auto-hide option (among others).

      You could create your own theme based on “minimal-dark” and use the options you want.
      For example, in jquery.mCustomScrollbar.css you can copy the “minimal-dark” CSS rules and change .mCS-minimal-dark to your themes class-name, e.g. .mCS-myTheme-dark. Then, in your mCustomScrollbar fn call you can enter your theme:
      $(selector).mCustomScrollbar({ scrollbarPosition: "outside", theme: "myTheme-dark" });

      Reply
  14. LT
    Posted on June 6, 2014 at 12:00 Permalink

    What’s the comment code for this forum? the ; or #? How do I post the code?

    Reply
  15. LT
    Posted on June 6, 2014 at 11:58 Permalink

    I’m adding * to see if now the code will show:

    9. HTML Header code (also known as “Paste to Head”):

    This code calls jquery from the internet:

    *
    *
    *

    This code calls jquery locally (if jquery.min.js was added to the Site Manager or page – see setp 4):

    *
    *
    *

    Reply
  16. LT
    Posted on June 6, 2014 at 11:56 Permalink

    I noticed that some of the code I posted was cutoff by this forum. Also I noticed some typos… I’m submitting it again to see if it will take the whole text, or at least it is a better set of instructions:

    malihu-custom-scrollbar-plugin-master “STEP BY STEP How To” using Serif Webplus X6:

    (A)

    -To add the “unique scrollbar” to the whole site and call it at anytime:
    -Go to –> Tools, Site Manager, File Manager and then:

    1. Add to Site Manager: jquery.mCustomScrollbar.concat.min.js
    2. Add to Site Manager: jquery.mCustomScrollbar.css
    3. Add to Site Manager: mCSB_Buttons.png
    4. Add to Site Manager: jquery.min.js

    NOTE: jquery.min.js was manually download from

    http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js

    This link will give you a page with a lot of text/code.
    From the menu bar of the browser, click on “Save Page As” and this will save it as jquery.min.js

    (B)

    -OR to add it to the individual page(s) as needed:
    -On the page contining the text box, go to “Insert”, then “HTML Fragment” and then draw a box anywhere on the page. Then double click the HTML Fragment box and:

    4. Add: jquery.mCustomScrollbar.concat.min.js
    5. Add: jquery.mCustomScrollbar.css
    6. Add: mCSB_buttons.png
    7. Add: jquery.min.js

    USE ONE OR THE OTHER (A OR B), THEN:

    8. After selecting option A or B, on the page contining the text box, insert (if option A) “HTML Fragment” and then draw a box anywhere on the page. Then double click the HTML Fragment box and insert (if option B was selected, HTML Fragment is already open):

    9. HTML Header code (also known as “Paste to Head”):

    This code calls jquery from the internet:

    This code calls jquery locally (if jquery.min.js was added to the Site Manager or page – see setp 4):

    10. HTML Preamble code (also known as “Paste to Body”):

    (function($){
    $(window).load(function(){
    $(“#content”).mCustomScrollbar({
    theme: “dark-thick”
    });
    });
    })(jQuery);

    If adding more than one unique scrollbar on the same page (#content and #content2 is explained on steps 10-12):

    (function($){
    $(window).load(function(){
    $(“#content”).mCustomScrollbar({
    theme: “dark-thick”
    });
    });
    })(jQuery);

    (function($){
    $(window).load(function(){
    $(“#content2”).mCustomScrollbar({
    theme: “light”
    });
    });
    })(jQuery);

    ETC.

    Add it to the page body:

    (function($){
    $(window).load(function(){
    $(“body”).mCustomScrollbar({
    theme: “dark-thick”
    });
    });
    })(jQuery);

    11. Insert a text box with overflow text (if not already existing).

    12. Select the text box (or right click on it) and for “ID” write “content” and for “write ID for this object” select YES.

    13. If adding another box, then “ID” should be “content2”, etc.

    Custom Scrollbar Themes:
    3d
    3d-dark
    3d-thick
    3d-thick-dark
    dark
    dark-2
    dark-3
    dark-thick
    dark-thin
    inset
    inset-2
    inset-2-dark
    inset-3
    inset-3-dark
    inset-dark
    light-2
    light-3
    light-thick
    light-think
    minimal
    minimal-dark
    rounded
    rounded-dark
    rounded-dots
    rounded-dots-dark

    Reply
  17. LT
    Posted on June 6, 2014 at 11:43 Permalink

    Hi,

    Can some one please tell me how to change the browser default scrollbar to these malihu custom scrollbar when using Serif Webplus X6?

    So far, I am able use these custom scrollbar with text boxes, iFrames, etc., but not on the body of the page… maybe after I sleep it over I’ll figure it out…

    I will share here my steps with Serif Webplus X6 for text boxes, etc.

    malihu-custom-scrollbar-plugin-master “STEP BY STEP How To” using Serif Webplus X6:

    (A)

    -To add the “unique scrollbar” to the whole site and call it at anytime:
    -Go to –> Tools, Site Manager, File Manager and then:

    1. Add to Site Manager: jquery.mCustomScrollbar.concat.min.js
    2. Add to Site Manager: jquery.mCustomScrollbar.css
    3. Add to Site Manager: mCSB_Buttons.png
    4. Add to Site Manager: jquery.min.js

    NOTE: jquery.min.js was manually download from

    http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js

    This link will give you a page with a lot of text/code.
    From the menu bar of the browser, click on “Save Page As” and this will save it as jquery.min.js

    (B)

    -OR to add it to the individual page(s) as needed:
    -Insert HTML Fragment and:

    4. Add: jquery.mCustomScrollbar.concat.min.js
    5. Add: jquery.mCustomScrollbar.css
    6. Add: mCSB_buttons.png
    7. Add: jquery.min.js

    USE ONE OR THE OTHER (A OR B), THEN:

    8. On the page contining the text box, go to “Insert”, then “HTML Fragment” and then draw a box anywhere on the page. Then double click the HTML Fragment box and insert:

    9. HTML Header code (also known as “Pate to Head”):

    This code calls jquery from the internet:

    This code calls jquery locally (if jquery.min.js was added to the Site Manager or page – see setp 4):

    10. HTML Preamble code (also known as “Paste to Body”):

    (function($){
    $(window).load(function(){
    $(“#content”).mCustomScrollbar({
    theme: “dark-thick”
    });
    });
    })(jQuery);

    If adding more than one unique scrollbar on the same page (#content and #content2 is explained on steps 10-12):

    (function($){
    $(window).load(function(){
    $(“#content”).mCustomScrollbar({
    theme: “dark-thick”
    });
    });
    })(jQuery);

    (function($){
    $(window).load(function(){
    $(“#content2”).mCustomScrollbar({
    theme: “light”
    });
    });
    })(jQuery);

    ETC.

    11. Insert a text box with overflow text.

    12. Select the text box (or right click on it) and for “ID” write “content” and for “write ID for this object” select YES.

    13. If adding another box, then “ID” should be “content2”, etc.

    Custom Scrollbar Themes:
    3d
    3d-dark
    3d-thick
    3d-thick-dark
    dark
    dark-2
    dark-3
    dark-thick
    dark-thin
    inset
    inset-2
    inset-2-dark
    inset-3
    inset-3-dark
    inset-dark
    light-2
    light-3
    light-thick
    light-think
    minimal
    minimal-dark
    rounded
    rounded-dark
    rounded-dots
    rounded-dots-dark

    Reply
  18. LT
    Posted on June 6, 2014 at 08:51 Permalink

    I’m absolutely new to jQuery. What I see here is awesome, but I don’t understand a thing. I am using Serif Webplus X6 and I can’t get this to work.

    Please, could some one give me step-by-step instructions on how to add this awesome scrollbars to a page, iFrame, or overflow text box in Serif Webplus? Let’s say I have a blank website with one or two undefined pages, just for testing, and I want to right there and then change the scroolbars on the pages (or master page if needed) or on an overlfow text box or a simple iFrame, how do I make this unique scrollbar v.3 work?

    Thanks you.

    Reply
  19. Emil Andersson
    Posted on June 5, 2014 at 14:41 Permalink

    Hello!

    First I have to say: Awesome plugin! Just what I’ve been looking for. But I need to know if it is possible (within this plugin) to make a jump to a section when the scroll event has ended. I.e am developing a both horizontal and vertical scrolling site and I want to make the page scroll down a section after the current section is done scrolling.
    I have been playing around with onTotalScrollBack to achieve this, but with no luck. Do you have any suggestions?

    Thanks!

    Reply
  20. Nick Robinson
    Posted on June 4, 2014 at 17:02 Permalink

    Hi, really great plugin but i do have a bit of an accessibility issue i hope you can help with!

    I want the content to scroll to links within the main container when i tab onto them, yet the autoScrollOnFocus parameter doesn’t appear to work for me.

    My scroller consists of a series of DIVs holding links i.e.
    <div id="scroller"> <div class="holder" id="holder1"> <a href="mylink.com">Link</a> </div> <div class="holder" id="holder2"> <a href="mylink.com">Link</a> </div> <div class="holder" id="holder3"> <a href="mylink.com">Link</a> </div> </div>

    I’m initializing as so:
    $("#scroller").mCustomScrollbar({ theme:"dark-thick", scrollInertia:550, horizontalScroll:true, mouseWheelPixels:116, keyboard:{ enable: true }, scrollButtons:{ enable:true, scrollType:"pixels", scrollAmount:116 }, advanced:{ autoScrollOnFocus: true } });
    I found a workaround which was to bind the “scrollTo” command to automatically scroll to the position i tabbed to .. i.e.
    $('div#scroller div.holder').focusin(function() { var $mydiv = $(this); var divId = "#" + $mydiv.attr('id'); $("#scroller").mCustomScrollbar("scrollTo",divId); });
    The problem with this solution is that although the scroll works when i tab, when i click on the link within the DIV i’m not directed to the link target, the scrollTo command overrides it and i have to click again once the scrollTo has finished for the link to work. Can you help?
    Many Thanks
    Nick

    Reply
    • Nick Robinson
      Posted on June 4, 2014 at 17:04 Permalink

      Apologies for double post, pls delete previous

      Reply
    • malihu
      Posted on June 4, 2014 at 20:32 Permalink

      Hello,

      Your links should have a tabindex attribute set, for example:
      <div class="holder" id="holder1"> <a href="mylink.com" tabindex="1">Link</a> </div> <div class="holder" id="holder2"> <a href="mylink.com" tabindex="2">Link</a> </div> <div class="holder" id="holder3"> <a href="mylink.com" tabindex="3">Link</a> </div>

      If you’re using version 3 of the plugin, you should remove the advanced:{ autoScrollOnFocus: true } from mCustomScrollbar function call (see option default value in Configuration section)

      Reply
      • Nick Robinson
        Posted on June 5, 2014 at 16:56 Permalink

        Thanks, this works just fine. I assigned a tabindex of 0 to each one so as to keep with the natural order of the page. Additionally i downloaded version 3 as suggested, removed “autoscrollOnFocus” and removed my “scrollTo” bind.

        Many thanks and great plugin.
        Nick

        Reply
  21. Vikas
    Posted on June 4, 2014 at 14:41 Permalink

    Hi I am using custom scrolbar for a div which contains content in accordion. I want the scrollbar to scroll to the accordion title when it is clicked and it expands . But i am unable to do so.The scrollto method is not working. I am using id of the accordion tile clicked in a variable and passing it as argument the scrollto.

    I am using the following code when the accordion content expands.
    var eID= '#'+ $(this).attr('id'); console.log(eID); $("#content_1").mCustomScrollbar("scrollTo",'eID');
    Kindly Help.

    Reply
    • malihu
      Posted on June 4, 2014 at 20:19 Permalink

      Hi,
      You need to change 'eID' to eID as it’s a variable (not string).

      Reply
  22. Balint
    Posted on June 3, 2014 at 19:04 Permalink

    Hi!

    It’s a very great plugin! I am testing the new feature of keyboard support. I have to click inside the div before to use the keyboard scroll. How should I focus that div to hover instead of click?

    Thank you!

    Reply
    • malihu
      Posted on June 4, 2014 at 02:27 Permalink

      Having to click (and gain focus) in order for keyboard keys to work is the correct behavior and it matches exactly the behavior of browser’s native scrollbar (you can’t use the keys to scroll unless you click inside an overflowed element).

      If you application is very specific (e.g. an image gallery) and you do need to enable keyboard on hover, add the following (as it is) after your mCustomScrollbar function call:
      $(".mCustomScrollBox").mouseenter(function(){ $(this).focus(); }).mouseleave(function(){ $(this).blur(); });

      In my opinion, if you’re just adding a scrollbar to a div in a page, you should leave the default behavior, as scrolling via keyboard is reserved for the whole page unless the user specifically changes it by clicking inside another scrollable element.

      Reply
      • Balint
        Posted on June 4, 2014 at 11:28 Permalink

        Thank you for fast response and for the idea! You are the best! 🙂

        Reply
  23. Kiowa K.
    Posted on June 2, 2014 at 09:59 Permalink

    Colors of dragger_bar and buttonUp/buttonDown
    ——————————————

    I finally figured out where to set the colors of the :active, :hover’d, and onDrag’d dragger_bar
    (“background-color” in the THEMES section of the .css file).

    But the color of the up and down buttons seem to be set as just shades of gray and white in the .png file.
    Would it take “Photoshopping” the .png file to change the colors of the :active buttons, or can
    that be done in the .css file?

    Kiowa

    Reply
    • malihu
      Posted on June 2, 2014 at 10:42 Permalink

      To change the button images colors (which are white or black) you’ll need to edit mCSB_buttons.psd. Their opacity can be changed via jquery.mCustomScrollbar.css (“6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS”)

      Reply
  24. Kiowa K.
    Posted on June 2, 2014 at 09:55 Permalink

    Disabled links – problem solved
    ——————————-

    The problem was complicated by links that referenced ahead to sections of the page, not only back to the top, so the value of the href attribute varied from link to link. But now they work again using click handlers –

    First, this worked using the substring() function for the String:

    $(document).ready(function() {
    $(‘a[href^=#]’).click(function() {
    var label = $(this).attr(‘href’);
    $(‘.scrollPanel’).mCustomScrollbar(‘scrollTo’, label.substring(0));
    });
    });

    and then this worked using the .attr() method for the String:

    $(document).ready(function() {
    $(‘a[href^=#]’).click(function() {
    $(‘.scrollPanel’).mCustomScrollbar(‘scrollTo’, $(this).attr(‘href’));
    });
    });

    and finally, this worked using a simplified selector as well:

    $(document).ready(function() {
    $(‘a[href]’).click(function() {
    $(‘.scrollPanel’).mCustomScrollbar(‘scrollTo’, $(this).attr(‘href’));
    });
    });

    Apparently, jQuery (and/or ‘scrollTo’) are very tolerant of the presence or absence of the ‘#’ leading character in a link’s href attribute, and you can pretend that it isn’t there.

    Kiowa

    Reply
    • malihu
      Posted on June 2, 2014 at 10:58 Permalink

      Yeap. I developed the scrollTo mehod to accept multiple object types.
      You can actually call things like:
      $(".scrollPanel").mCustomScrollbar("scrollTo", $("#content-1 p").eq(4).next()); $(".scrollPanel").mCustomScrollbar("scrollTo", "-="+200); $(".scrollPanel").mCustomScrollbar("scrollTo", document.getElementById("id"));

      Reply
  25. Theo
    Posted on June 2, 2014 at 01:43 Permalink

    Note that $(document).ready() doesn’t work in webkit (CHROME/SAFARI)
    Use $(window).load() instead.

    Reply
    • malihu
      Posted on June 2, 2014 at 02:53 Permalink

      You shouldn’t have any issues with document ready unless your element is created dynamically via javascript after mCustomScrollbar function is called or you’re using the mCustomScrollbar class which is automatically called on window load.

      Reply
  26. Kiowa K.
    Posted on June 1, 2014 at 10:39 Permalink

    Use of “scrollTo” method to restore link-s’ click function?
    ———————————————————–

    My existing HTML has many links, as in <a href="#label">Label</a>, where a click takes the viewer to <a id="label"></a>, but these no longer work after .mCustomScrollbar() runs to implement the custom scrollbar – the custom scrollbar works, but the links don’t.

    At window load time I would like to bind a click handler for each of these links that would re-enable the click navigation. From the documentation, it appears that a script with the following format in the <head> section would do it:

    $(window).load(function() {
    $(‘a[href]’).click(function() {
    .mCustomScrollbar(‘scrollTo’, String)
    });
    });

    But what should “String” be?

    Thanks for any help. If I can’t get the links to work again, I’ll have to abandon the nifty inertial scrollbar.
    Kiowa

    Reply
    • malihu
      Posted on June 1, 2014 at 12:07 Permalink

      The string would be "#label":
      $(selector).mCustomScrollbar("scrollTo","#label")
      The selector should be the same element you applied the custom scrollbar.
      For more info see plugin methods

      Reply
  27. Umair Ulhaque
    Posted on May 31, 2014 at 14:51 Permalink

    It is something which I have been looking for to implement custom scrollbars on my website. Prior to use I want to know that may I implement this on browser’s native scrollbar (a default scrollbar)?

    I understood we can implement this on any element such as divs, but I want to manipulate the browser window scroll which is on right side.Kindly guide me through

    Thanks.

    Reply
  28. Magatsu
    Posted on May 31, 2014 at 12:53 Permalink

    Hi, I can’t get it to work, I always got the basic os scrollbars (wich really do not fit with my design).
    I have those 2 divs :

    <div id="cLeft" class="mCustomScrollbar" style="width:450px;height:560px;padding-left:32px;padding-right:18px;min-height:50px;float:left;margin-top:55px;overflow:auto;"></div>
    <div id="cRight" class="mCustomScrollbar" style="width:430px;height:560px;padding-left:25px;padding-right:25px;min-height:50px;float:left;margin-top:55px;overflow:auto;"></div>

    they are empty now ‘coz the content is dynamicaly added by php/ajax functions.

    And I have also this code :

    (function($){ $(window).load(function(){ $(".mCustomScrollbar").mCustomScrollbar({ scrollButtons:{ enable:true } }); }); })(jQuery);

    Did I miss something ? (I did not precised that I’ve already added your css and js in my head tag)
    Do you think the problem come from the fact that my css (for the 2 divs in particular) is directly bounded to my html tags unlike being in a separate stylesheet ?

    Reply
    • Magatsu
      Posted on May 31, 2014 at 13:02 Permalink

      Little more detail, I’ve remove the “min-height” property (wich was usefull for positioning purpose but now it’s useless), it did not change anything.

      I’ve seen in my firebug control pannel that the png file of your scrollbars is not even loaded, but I don’t have any script errors

      Reply
      • Magatsu
        Posted on May 31, 2014 at 14:38 Permalink

        Last edit, it’s working, that’s just that my browser did not actualized

        Reply
  29. Kiowa K.
    Posted on May 31, 2014 at 10:27 Permalink

    Great learning experience and fun to use! For one, I learned that you can’t add a class to an element that is selected on the basis of its existing class name. When I abandoned that and used the .mCustomScrollbar() function to attach the scrollbar instead if the class name “mCustomScrollbar”, all was sweet.

    A couple questions remain:

    1) anchors within the scrolled stopped working, and quick navigation to sections of a scrolled document – or back to its beginning – with just a click on a link no longer works. How can that be repaired, or is there a work-around?

    2) how can the sliding scroll bars be given a color?

    Kiowa

    Reply
  30. Mariano
    Posted on May 31, 2014 at 03:03 Permalink

    Hi. great plugin!! My problem is that it does’t work the themes. Bars and bottoms are normal and I can’t chage them. Where exactly have I to add the mCSB_buttons.png file?, maybe this is my mistake.
    Sorry my english!!
    Thanks

    Reply
    • Kiowa K.
      Posted on May 31, 2014 at 10:36 Permalink

      See Malihu’s answer to my similar question on May 28, 2014 at 04:58. I have the CSS file in a folder called “css”, and I put my .png file in a sibling folder called “images” and linked to it on line 377 of jquery.mCustomScrollbar.css with:
      background-image: url(../images/mCSB_buttons.png);

      Kiowa

      Reply
      • Mariano
        Posted on June 3, 2014 at 02:24 Permalink

        Muchas gracias Kiowa K.!!!
        Thank you very much!!!

        Reply

Comments pages: 1 48 49 50 51 52 85

Post a comment

Cancel reply

Your e-mail is never published nor shared. Required fields are marked *

You may use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
You can write or copy/paste code directly in your comment using the <code> tag:
<code>code here...</code>
You may also use the data-lang attribute to determine the code language like so:
<code data-lang-html>, <code data-lang-css>, <code data-lang-js> and <code data-lang-php>

css.php