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,618 Comments

Post a comment

Comments pages: 1 15 16 17 18 19 84

  1. Ari
    Posted on August 16, 2012 at 20:13 Permalink

    This is so great. Is this possible to be added in a textarea?

    Reply
    • malihu
      Posted on August 17, 2012 at 15:14 Permalink

      Nope. Cannot create the additional divs required inside a textarea input. You might be able to simulate a custom scrollbar for a textarea with an outer container and some additional javascript. I might create such demo when I get some some time.

      EDIT: ok, I made one 😉 Check it here:
      http://manos.malihu.gr/tuts/custom-scrollbar-plugin/textarea_example.html

      Reply
      • Ari
        Posted on October 16, 2012 at 23:57 Permalink

        Ahh thanks!
        Although there is a bit jerky movement when the textarea gains focus.
        Have you thought of using a contenteditable workaround? (Like textareas being replaced with contenteditable and the scrollbar applied to them)

        Reply
        • malihu
          Posted on October 17, 2012 at 01:25 Permalink

          Yes, I believe you can definitely use the html5 contenteditable attribute to create a better simulated textarea.

          I just made a quick example on an actual textarea as I don’t know if every user can use or code their forms with non-form elements.

          It’s a great idea though, so thanks for the feedback 🙂

          Reply
  2. scythargon
    Posted on August 16, 2012 at 14:02 Permalink

    Thanks a lot for that. Answer me please – where is the page that’s screenshot is a topic-image of this thread? I mean – how can I open this page – http://manos.malihu.gr/wp-content/uploads/2012/07/jQuery-custom-content-scroller-v2-fm.png – it looks awesome too:)

    Reply
  3. Anthony Russo
    Posted on August 16, 2012 at 07:02 Permalink

    I am having an issue with using the css style “max-height and overflow:auto” together for my div. If I use these together this scrollbar will not show up at all. Is there a fix for this? Any help would be appreciated as I am very new to these things. Thanks ahead of time.

    Reply
    • malihu
      Posted on August 16, 2012 at 15:28 Permalink

      Hi,

      The plugin currently requires a height value to function correctly, but you can achieve what you need with a couple of extra lines in your script.

      You can programmatically get your div’s max-height value and set it as your div’s height. For example:

      $(window).load(function(){ var YourMaxHeightDiv=$("#content_1"); YourMaxHeightDiv.mCustomScrollbar().css({"height":YourMaxHeightDiv.css("max-height")}).mCustomScrollbar("update"); });

      The code might look a bit confusing cause we “chain” all functions in a single line, but it’s actually very simple.
      We firstly declare our max-height div (YourMaxHeightDiv) and then we use it to a)call the plugin function, b)set its height by its max-height value and c)call the update method of the plugin.

      Also, each time you add, remove content from your div or change its dimensions, you will need to call the update method:

      YourMaxHeightDiv.mCustomScrollbar("update");

      Hope this helps

      Reply
      • Anthony Russo
        Posted on August 16, 2012 at 18:02 Permalink

        So should it look like this?
        !window.jQuery &amp;&amp; document.write(unescape('%3Cscript src="jquery/jquery-1.7.2.min.js"%3E%3C/script%3E')) !window.jQuery.ui &amp;&amp; document.write(unescape('%3Cscript src="jquery/jquery-ui-1.8.21.custom.min.js"%3E%3C/script%3E')) <!-- mousewheel plugin --> <!-- custom scrollbars plugin --> (function($){ $(window).load(function(){ var YourMaxHeightDiv=$(".content"); YourMaxHeightDiv.mCustomScrollbar().css({"600":YourMaxHeightDiv.css("600")}).mCustomScrollbar("update"); }); })(jQuery);

        I am guessing not because it is not working. I apologize I am not the greatest at jQuery yet.

        Reply
        • malihu
          Posted on August 16, 2012 at 20:21 Permalink

          No. You insert the code I provided exactly as it is and just change the #content_1 selector to your div.

          For example, if your div has class .content and you’ve set in your CSS a max-height for it, the complete code would be:

          <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script> <script>!window.jQuery && document.write(unescape('%3Cscript src="jquery/jquery-1.7.2.min.js"%3E%3C/script%3E'))</script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script> <script>!window.jQuery.ui && document.write(unescape('%3Cscript src="jquery/jquery-ui-1.8.21.custom.min.js"%3E%3C/script%3E'))</script> <script src="jquery.mousewheel.min.js"></script> <script src="jquery.mCustomScrollbar.js"></script> <script> (function($){ $(window).load(function(){ var YourMaxHeightDiv=$(".content"); YourMaxHeightDiv.mCustomScrollbar().css({"height":YourMaxHeightDiv.css("max-height")}).mCustomScrollbar("update");}); })(jQuery); </script>

          Reply
          • Anthony Russo
            Posted on August 16, 2012 at 21:36 Permalink

            Ok I understand now. Thank you for your help.

  4. Federico
    Posted on August 15, 2012 at 20:35 Permalink

    Manos, just a question about scrollbar style. In my page http://gavs.it/rci_dev_scroll.php the scrollbar looks not styled like in the example of the following page: http://gavs.it/rci_test.php. Both pages share your css and file but the scrollbar looks quite odd, not rounded border or style.
    Thanks for any help.

    Reply
    • malihu
      Posted on August 16, 2012 at 15:45 Permalink

      You need to change the styling (colors, buttons images etc.) of the scrollbar within the CSS according to your white background (my demo has light colored scrollbar on dark background).

      I’ve also included light and dark colored versions of arrows images in the mCSB_buttons.png, so you don’t have to create them on your own (that is if you do use the arrow buttons).

      On the demo the 5th example (.content_5) has dark colored scrollbar so you can check its css rules in jquery.mCustomScrollbar.css and apply them to your styling 😉

      Reply
  5. [email protected]
    Posted on August 15, 2012 at 17:14 Permalink

    Hello. you have a major bug in your code.

    In our dynamically scalled site the verticall scroller breaks. The last entry of the list jumps to the nexst row becouse he automatically set width of the div “div#mCSB_1.mCustomScrollBox div.mCSB_container” gets some pixels to short. only solution for us was that we increase its width after he instances for about 40 pixels.

    Reply
    • [email protected]
      Posted on August 15, 2012 at 17:16 Permalink

      ps. forgot to mention what couses this bug. it is coused when the elements in the div. is somthing else then letters.

      Even spaces  , +,- etc breaks it…. nutss….

      Reply
      • malihu
        Posted on August 15, 2012 at 17:19 Permalink

        Hello,

        Can you provide a link or a description on how to replicate this bug? Thanks.

        Reply
  6. Federico
    Posted on August 15, 2012 at 12:45 Permalink

    Sorry, I need to ask some help. I’ve applied all needed libraries and followed the example, but the custom scrollbar seems not applied to my box :(. You can see it at this page: http://gavs.it/rci_dev_scroll.php
    The box is the area on the right column with title “RCI latest updates”, right now it includes a long list of dates into an unordered list.
    Thanks for any help

    Reply
    • malihu
      Posted on August 15, 2012 at 15:05 Permalink

      I think you need to give your .content_8 div a height value, otherwise the div expands to fully display its content, so the plugin assumes no scrollbar is needed (just like the browser does with its native scrollbar on divs with overflow: auto).

      Reply
      • Federico
        Posted on August 15, 2012 at 18:31 Permalink

        Hi Manos, thanks a lot for your feedback and help. Your great work deserve a donation (sent right now). Thanks again

        Reply
        • malihu
          Posted on August 16, 2012 at 14:09 Permalink

          Thanks a ton Federico 🙂

          Reply
  7. Federico
    Posted on August 15, 2012 at 11:44 Permalink

    Hi Malihu, great script! Just wondering if scrolling a div at the bottom of its own area the script could load more content using AJAX and PHP server script.
    In your AJAX example I can load more content using a link on the div, could be done automatically as I wrote above? In my site I have a box on the right side of a main page, the box show latest additions into a database, ordered by date; would be useful to scroll that box and see older updates loaded dinamically.
    Thanks for reply

    Reply
  8. Robert
    Posted on August 14, 2012 at 23:43 Permalink

    Why does the scroller look broken in IE7

    Reply
    • malihu
      Posted on August 15, 2012 at 15:31 Permalink

      Its just the styling of the scrollbar that is probably too advanced for IE7… Scrollbar functions correctly, so you could just add some CSS hacks and prefixes to provide support for old IE versions.

      Reply
  9. Hernán
    Posted on August 14, 2012 at 19:29 Permalink

    HI! First of all I want to congratulate you and thank to you, because it’s a great Script and the instructions are very easily to follow.

    However, I want to make the following question and may be you can help me.

    I’m working with this example:
    http://manos.malihu.gr/tuts/custom-scrollbar-plugin/ajax_example.html

    The first link for downloading a new content works perfectly.

    But when from this HTML, that I previously loaded (demo_files/ajax_content.html), I want to load a new content, it doesn’t load it in the same scroll, but in a new webpage.

    My idea is to load new contents from the same html that I’ve loaded before.

    Any suggestion how I can solve this problem?

    Thank you!

    Reply
    • malihu
      Posted on August 15, 2012 at 15:40 Permalink

      Hello,

      This probably happens because the click event does not bind to your newly added link. This is normal as the new link was not in the DOM when the click function was declared. I think you should use something like jQuery’s .live() event handler which binds events on current and future elements.

      See here for more info and usage:
      http://api.jquery.com/live/

      Reply
  10. iMan
    Posted on August 14, 2012 at 14:20 Permalink

    Hello,

    I have a problem in IE7 and IE8. I have the scrollbar on tag in display block and the problem is that when I scroll down to items with link which are hidden in the scroll and trying to click on them I just got scrolled up to the top and the href link doesn´t work. It only happens in IE7 and IE8.

    Anyone can hepl?

    Thanks

    Reply
    • iMan
      Posted on August 14, 2012 at 14:23 Permalink

      code update:
      scrollbar on <ul> tag in display block
      click on <li><a> tag doesn´t work

      Reply
    • iMan
      Posted on August 15, 2012 at 15:06 Permalink

      got it .. just comment out /*scrolling on element focus (e.g. via TAB key)*/

      Reply
      • malihu
        Posted on August 15, 2012 at 15:20 Permalink

        Do you have anchor links or input buttons that produce this issue when clicked? If you want, please make sure you have the very latest plugin version as it only focuses links that have “tabindex” attribute.

        Reply
  11. Jesper
    Posted on August 14, 2012 at 03:52 Permalink

    Nice scroller

    But dont work on iphone 🙁

    Reply
    • malihu
      Posted on August 14, 2012 at 16:02 Permalink

      Hi,

      What iOS version does your iPhone have?

      Reply
  12. SReed
    Posted on August 13, 2012 at 20:58 Permalink

    I was wondering if anyone has found a way to include this custom scroll bar into WordPress 3.4.1 without breaking other plug ins. Once I include the scroller’s required js files into my site, my Carousel image gallery stops working (I think because it uses jquery 1.7.2). I realize that this may be more of a WordPress question, so no worries if you can’t tackle it here, but I figured some other people may be dealing with a similar problem. I’m the first to admit that I don’t know much about jquery (that’s why I loved being able to use this plug in, as it is very simple to implement for beginning coders). Thanks in advance!

    Reply
    • malihu
      Posted on August 14, 2012 at 16:15 Permalink

      I’ve tested the plugin on a vanilla WordPress installation and it works well.

      If you have other plugins that already use jQuery, you can skip the jQuery inclusion step on the guide above. You should have 1 instance of jquery loaded on your page.

      The plugin works with the current and previous versions of jQuery, so there shouldn’t be any problem using jQuery 1.6 for example.

      Also, check your page with firebug (or any other developer tools) to see if you get any console errors.

      Reply
  13. Joost
    Posted on August 13, 2012 at 18:37 Permalink

    Sorry for the doublepost (#481);

    I actually managed to get the main page to scroll down at the end of the content by combining a simple jQuery command with your OnTotalScroll function. However, this only works when scrolling down. Is it also possible to implement this when reaching the top of the content (i.e. an inverted OnTotalScroll)?

    I understand that this function would probably require some work on your sourcecode but if you could point me in the right direction that would be great!

    Reply
  14. Chris
    Posted on August 12, 2012 at 18:30 Permalink

    Hi, firstly this is a really great script, and the instructions very easy to follow.

    However, I wonder whether you may be able to help me please with a slight problem I have.

    I’m able to put together a page, which correctly shows the scroll bar if the content of the div is hardcoded text. But when the content of the div is dynamic, i.e. RSS feeds , although there are no specific errors shown, the scroll bar is no longer visible, and despite spending quite some time trying to get this to work, I’ve been unable to find a solution.

    I just wondered whether you may be able to offer any guidance on how I may be able to get this to work?

    Many thanks and kind regards

    Chris

    Reply
    • malihu
      Posted on August 12, 2012 at 19:58 Permalink

      Hello,

      You need to call the plugin function (or update method) after your dynamic content is fully loaded, in order for the script to calculate correctly your content’s length. Please check section “Loading & updating content dynamically” of the post for more info and examples.

      Reply
      • Chris
        Posted on August 14, 2012 at 20:17 Permalink

        Hi, thank you very much for your help and clear guidance.

        I’ve now been able to get this to work.

        Sincere thanks and kind regards

        Chris

        Reply
  15. Ramzi
    Posted on August 12, 2012 at 13:30 Permalink

    Good plugin…very good 🙂

    Is it compatible with the new Jquery 1.8.0? It seems Not Yet.

    Reply
    • malihu
      Posted on August 12, 2012 at 15:11 Permalink

      I’ve just tested the demo with jQuery 1.8 (via Google CDN) and works as expected.

      Reply
      • Ramzi
        Posted on August 12, 2012 at 15:30 Permalink

        Thank you for response.
        Doesnt work for me.
        Try to clear the browser cache.

        Reply
        • malihu
          Posted on August 12, 2012 at 15:59 Permalink

          I have. I also tested it with a local copy of jQuery 1.8.0 and it works. Do you test the demo or another implementation? Also does it fail on all browsers?

          Reply
          • Ramzi
            Posted on August 12, 2012 at 16:07 Permalink

            Thank you. Solved. It was a jquery-ui version problem ( 1.8.20 updated to 1.8.22 solved problem)

  16. Jorge Cocompech
    Posted on August 11, 2012 at 00:12 Permalink

    Is very useful for minilaptops and tablets, but @ iPhone or some similar (smartphone off course) doesn’t work . .
    how can i apply it at smartphones?

    Thanks and have a nice weekend.

    Reply
    • malihu
      Posted on August 11, 2012 at 14:42 Permalink

      I’ve tested it on Android smartphones (version 2.x and 4.x) and it works as expected. What iOS version is your iPhone?

      Reply
  17. Junaid
    Posted on August 10, 2012 at 15:45 Permalink

    great work!

    the up and down images are not showing on white background help please

    Reply
    • malihu
      Posted on August 10, 2012 at 16:12 Permalink

      Hello, 

      You can change the up and down images within the CSS file. The mCSB_buttons.png file contains multiple sets of arrows. Changing the background-position of .mCSB_buttonUp and .mCSB_buttonDown reveals different coloured arrows. 

      Info on CSS sprites: 
      http://css-tricks.com/css-sprites/

      Reply
  18. GoliZeka
    Posted on August 9, 2012 at 17:04 Permalink

    Ok, this one is truly magnificent job.
    I’m pulling my hear out trying to resolve issue when is set to display:none and scroll has to be inside it.

    I don’t want to ask any questions – I’ll go trough documentation and Q&A once again, and if I fail, THEN I will ask… :))

    Cheers, mate, and thanks for this!

    Reply
    • GoliZeka
      Posted on August 10, 2012 at 17:55 Permalink

      Ok, I’m out of hair, and best I’ve got so far is this:

      function($){ $(window).load(function(){ $("#myContentID").mCustomScrollbar(); $(document).ready(function(){ $("#myContentID").hide(); }) }); })(jQuery);

      But for a few (awful) parts of sec’s when page loads, whole div with that ID is visible.

      I’ve put .hide(); under (document).ready ’cause it’s kinda faster then (window).load (some my logic..?) but still no luck.

      Any help will be more than appreciated!

      Thanks in advance

      Reply
      • malihu
        Posted on August 10, 2012 at 21:24 Permalink

        Hi,

        The way you do it, hide happens before custom scrollbar is applied (because of document ready). A hidden element has zero dimensions so the script cannot calculate content length correctly.

        Please check section “Hiding & showing content blocks with custom scrollbars” for more info and examples.

        Demo here:
        http://manos.malihu.gr/tuts/custom-scrollbar-plugin/init_hidden_example.html

        Reply
        • GoliZeka
          Posted on August 12, 2012 at 07:22 Permalink

          Solved. Many thanks for your time and effort.

          Reply
  19. Vishal Vekariya
    Posted on August 9, 2012 at 14:09 Permalink

    Thank You 🙂

    Reply
  20. Nenad Novakovic
    Posted on August 9, 2012 at 01:57 Permalink

    I love this custom scroller and love this fluid part too! Simplicty is always the best. However I am so sad cause I can’t use it.

    It seems to break two other scripts that are on same page and I am not quite sure if its fixable. I’ve tried many scrollers, none seem to be good looking and many of them require bunch of scripts.

    What does it conflict with , I have no ideas but I have just modal popup script and custom image over youtube script 🙁

    If you know any reasons… cheers!

    Reply
    • Nenad Novakovic
      Posted on August 9, 2012 at 02:04 Permalink

      YES! My mistake, thank God!

      It is just a conflict due to one gateway that uses older jQuery … 1.4.x or 1.6.x not quite sure!

      I’ll find a way to fix this then. Cheers fella!

      Reply
  21. Nando
    Posted on August 8, 2012 at 20:02 Permalink

    Hi
    congrats to this great work!
    I have a problem using the option “updateOnContentResize” – when set to false (default) i cannot see any of the scrolling content on iOS Safari or Chrome which exceeds the visible scroll-area (using horizontalScroll: true), the scrolled content is just cut off (but funny side effect: links are clickable, though)…

    on a desktop-browser everythings works as expected.
    when the option “updateOnContentResize” is set to TRUE the smooth scrolling gets disabled and theexceedingscrolling content is visible, so the plugin behaves as expected.
    are there any known workarounds for this problem?

    Reply
    • malihu
      Posted on August 8, 2012 at 20:43 Permalink

      Hello,

      Can you scroll the div containing your content? Does the same happens on any of the demo and examples posted here?

      updateOnContentResize option parameter works for dynamic content and auto-updates the scrollbar (instead of manually using the update method). When working with horizontal layout, you must make sure your new content is floated (left or right).

      I could provide more help if you could post a link with your implementation.

      Reply
      • Nando
        Posted on August 8, 2012 at 21:01 Permalink

        Hi – just sent you an email 🙂

        Reply
  22. Jake
    Posted on August 8, 2012 at 05:38 Permalink

    Hello once again Malihu!

    I have another question for you.

    Is it possible to load something on reaching the top/bottom of the scroll box without a div at the top or bottom.

    I saw your example at: http://manos.malihu.gr/tuts/custom-scrollbar-plugin/complete_examples.html

    However this just uses a div at the bottom and checks the length of it and then appends the picture if the “appended” divs length is less than 1.

    Is it possible to do this without a div at the top or bottom?

    Reply
    • malihu
      Posted on August 8, 2012 at 18:30 Permalink

      Hello Jake,

      Yes, of course. You can call any js function you want inside the onTotalScroll option parameter. Using extra divs, paragraphs etc. is totally up to you and depends on your implementation and markup.

      I have some additional examples you can check here:
      http://manos.malihu.gr/tuts/custom-scrollbar-plugin/issue_2_fix_test/infinite_scroll_examples-issue_2.html

      Reply
      • Jake
        Posted on August 9, 2012 at 02:51 Permalink

        Awesome Malihu!

        I might just be inexperienced with web development, which is entirely possible, however with each of your examples you are loading, refreshing, adding, etc. whenever the user scrolls to the bottom of the scroll box.

        Is the function onTotalScrollback only used for scrolling to the bottom? I’d like to be loading something when someone reached the top of a scroll box. Which I’m sure is possible but perhaps I’m just missing. Apologies for my inexperience.

        Reply
  23. Ferdie
    Posted on August 7, 2012 at 06:50 Permalink

    Hi Malihu, thanks for the plugin! I’ve used them on some websites that I’ve created and it works great.

    The only problem I am having is that when I used it along with bxSlider (http://bxslider.com/) the scrollUp and Down button does not work at FIRST until you drag the dragger then the buttons will start to work. I’m not sure if it conflicting or something? please help me thanks!

    $(document).ready(function(){
    $(‘#id’).bxSlider();
    });

    (function($){
    $(window).load(function(){
    mCustomScrollbars();
    });
    })(jQuery);
    function mCustomScrollbars(){
    $(“#id”).mCustomScrollbar(“vertical”,400,”easeOutCirc”,1.05,”auto”,”yes”,”yes”,3);
    }

    Reply
    • malihu
      Posted on August 7, 2012 at 16:29 Permalink

      Hi,
      I’d suggest trying to implement the new version of the plugin and see if you have the same issues.

      Reply
  24. Mason
    Posted on August 6, 2012 at 00:27 Permalink

    Heyo, the script works great, and it’s pretty easy to use. The only problem I’m having (and I’ve seen one person ask about it above) is that it won’t work on my homepage. If I jump off of my home page and come back to it, it seems to then work, but on the first page load the contents are formatted in the scrollbox, but the scroll bar does not appear and I can not scroll down the contents. Any suggestions?

    Reply
    • malihu
      Posted on August 6, 2012 at 02:05 Permalink

      Is your content loaded dynamically? If yes, make sure you call the plugin after content is fully loaded. The same applies if your content is initially hidden.
      Also, make sure you call the plugin inside window load function (especially if you have images, objects etc.).
      In general, make sure the custom scrollbar is applied after your content is fully loaded and visible, otherwise the plugin won’t have the correct content dimensions.

      Reply
      • Mason
        Posted on August 6, 2012 at 04:27 Permalink

        Ah! What an obvious answer, thank you very much. The plugin works amazingly!

        Reply
  25. Jake
    Posted on August 6, 2012 at 00:24 Permalink

    Awesome plugin!

    However I do have a question. When I’m appending something new to one of the scrollable divs I need to append it to the mSCB_container. Otherwise it won’t do anything.

    Another thing was I was wondering if it would be possible to completely reload a scrollable div using javascript. I’ve tried multiple ways now however I’m finding it quite difficult. I was hoping to be able to have a empty (or relatively empty) div. Then after you press a button it calls a php script that echo’s the proper information. Is that possible or just wishful thinking?

    Thanks a lot!
    Jake

    Reply
    • Jake
      Posted on August 6, 2012 at 00:39 Permalink

      Just to further explain the reasoning why I do:

      $(“.mCSB_container”).append(” … “);

      When I do it the way it is described in the config notes where I just do append to the class of the div. Ex:

      $(“.content”).append(” … “);

      It does add the content however it doesn’t add it into the scrollable div. It adds it after the scrollable div and creates a regular scroll bar.

      Please help!

      Reply
      • malihu
        Posted on August 6, 2012 at 01:57 Permalink

        Hello,

        Seems I’ve miss-typed the correct selector for the example (I’ve just corrected it).

        You need to append/load new content within the .mCSB_container, as it is the div containing the content to be scrolled. So, the correct way would be:

        $(".content .mCSB_container").append(" … ");

        Thanks for posting this 🙂

        I’ve made an additional ajax example, so check it to see if this helps you with your other question.

        Reply
        • Jake
          Posted on August 6, 2012 at 02:29 Permalink

          Awesome! I got the append working! Thanks a lot!

          Where was the ajax example you just made? I’d love to take a look at that to hopefully get my other part working.

          Thanks so much Malihu!

          Reply
  26. Zoli
    Posted on August 5, 2012 at 21:25 Permalink

    I’m having an issue implementing your plugin into a textarea.Is that possible?

    Reply
  27. Zoli
    Posted on August 5, 2012 at 21:13 Permalink

    I’m having an issue implementing your plugin into a ?Is that possible?

    Reply
  28. Drunk
    Posted on August 5, 2012 at 01:37 Permalink

    I have problems getting it to work on Mobile Browsers. It works good on normal browsers but on mobile is not showing the scroll bar.

    Reply
  29. Anakin
    Posted on August 3, 2012 at 13:53 Permalink

    Hello,

    I’m having a very strange problem with form elements. Each time I click on a input, select, or textarea the page scrolls up almost to the top… I found the code that was causing this, but I didn’t understand what it is doing, so I commented it for now (lines 529 to 534). There is any solution for this, so I can uncomment it again?

    Thanks!

    Reply
    • malihu
      Posted on August 3, 2012 at 14:28 Permalink

      The script auto-scrolls to input, textarea etc. when those have focus. You probably have floated elements that are not cleared correctly, so check your CSS to see if this is the cause.

      Reply
    • Erwin
      Posted on September 18, 2012 at 19:43 Permalink

      I got the same question! Please, tell me if you could solve it. I would really appreciate it. My content must be able to focus via tab key and scroll properly but I can’t figure it out.

      Thanks

      Reply
  30. Joost
    Posted on August 2, 2012 at 18:55 Permalink

    Great tool! I have one question though. If you apply the scrollbar to content that’s only a small part of your webpage, the ‘scrolling’ doesn’t revert to the normal browser scrollbar when the top or bottom of that content is reached. For example, when you scroll down your custom content (but the lower part of that particular doesn’t fit on your screen/browser window), it scrolls down the content perfectly but you can’t see the lower part of that content (you would have to scroll down your browser for that). How do I make it so that when the top or bottom of the content is reached, the ‘scrolling’ reverts back to the browser scrollbar as opposed to the content scrollbar?

    Thanks in advance and compliments for the tool!

    Reply
    • malihu
      Posted on August 2, 2012 at 19:51 Permalink

      I see what you mean. At the moment there’s not much you can do as this is the way mousewheel plugin works. When I get some time, I’ll see if I can apply a workaround for it.
      Thanks for your comment and feedback.

      Reply
      • Joost
        Posted on August 6, 2012 at 16:45 Permalink

        Thanks for your response. I actually managed to get the main page to scroll down when the end of the content container is reached by combining a simple jQuery command with your OnTotalScroll function. However, this only works when scrolling down. Is it also possible to implement this when reaching the top of the content (i.e. an inverted OnTotalScroll)?

        Also, there seems to be some kind of small delay before the OnTotalScroll function is executed. Is this a normal for jQuery/your plugin or is there a solution for this?

        Thanks in advance!

        Reply

Comments pages: 1 15 16 17 18 19 84

Post a comment

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