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 29 30 31 32 33 85

  1. Berend
    Posted on February 24, 2013 at 14:07 Permalink

    Hey there,

    Great plugin! I’m having a problem with the scrolling though. Since I’m not a great jquery expert I’d be really happy if someone could help on this.

    The problem is that on a scroll the scrollbar descends only a little with a slow reaction. I noticed that when I start scrolling immediately after the loading of the page when the mouse is unvisible that the scrolling works perfectly. But if I wait for the page to load completely and the mouse is visible the scrolling is jerky and in too small steps again.

    It might have something to do with a conflict of libraries. I loaded multiple ones to get multiple plugins working and also my theme loads an old one that I can’t find the source of. Really getting stuck on this. Hope to launch this site on short notice. Thanks in advance

    Reply
    • malihu
      Posted on February 25, 2013 at 09:41 Permalink

      Some scripts are probably slow down your page. Check your page with firebug (or any other developer tools) and see if you get any console errors.

      Reply
      • Berend van Eerde
        Posted on February 25, 2013 at 13:29 Permalink

        Hi there,

        There don’t seem to be an error right now… In the meantime I figured out that when you scroll whith the mouse hovering the scrolltools area, the scrolling works normally, But when the mouse is hovering the container this problem is occuring. Would you maybe take a look at:

        http://www.amuze.org/test-page

        Reply
        • Berend
          Posted on February 27, 2013 at 12:29 Permalink

          Still no luck on this… 🙁 Could this be a css issue? A Z-index problem or something. I’d hate to delete the custom-content-scroller out of my site, but I’m close to launching it. I hope someone can take a look at this.

          http://www.amuze.org

          Reply
  2. malarya
    Posted on February 23, 2013 at 15:42 Permalink

    Hi, malihu

    I found a possibility of bug.

    if you apply scroller on div with percentage height (80%)
    and paste into this div another divs with percentage heights (45%),
    your script remove from those divs attribute percentage height (this 45%).

    Example:
    .product_list { width: 100%; height: 80%; float: left; overflow: auto; } .product { width: 30%; height: 50%; margin: 3% 1.6%; float:left; }
    div with class “product” will be resized (deleted height attr).

    Reply
    • malihu
      Posted on February 24, 2013 at 09:28 Permalink

      Hello and thanks for the feedback!

      The issue you describe is not really a “bug” (as the plugin script does not remove or manipulate the height value) but has to do with scrollbars markup and CSS.

      Let me explain what happens…
      Without applying the plugin, your .product div resides directly inside .product_list. Since both have a height value set, .product gets the “correct” 50% height of its parent (80%).

      When plugin is applied, it generates the scrollbar markup and wraps content within .mCSB_container div (so the script can scroll/animate it). This means that your .product div resides now inside .mCSB_container of .product_list. Since .mCSB_container doesn’t have any height value, its children (.product) cannot apply the 50% height (it needs a parent with a height value set, as CSS in percentages are parent-children related).

      So for this to work, you must either set .product height in pixels (which will apply properly as the value is not related to its parent height), or give .mCSB_container of .product_list a specific height, for example:
      .product_list>.mCustomScrollBox>.mCSB_container{ height: 800px; }

      Hope this helps

      Reply
  3. saurabh
    Posted on February 22, 2013 at 14:29 Permalink

    Hello malihu,

    This is awesome plugin. Thanks for this.

    I have implemented this plugin successfully and its is working fine in its div area. But it is generating an issue with masonry layout. It is automatically increasing the height of main page. For example height of content data in customscrollbar div is 1000px then it set scrollbar into div in prefect way, but it also automatically set the height of main page to 1000px leaving a lot of blank space in right side.

    Please help me

    Reply
    • malihu
      Posted on February 22, 2013 at 19:01 Permalink

      Hello,

      I’ll try some tests and let you know. Does this happen on all browsers?
      Do you have a link with your implementation so I can check it online?

      Edit: Have you tried setting your div(s) to overflow:hidden?

      Reply
  4. Jack
    Posted on February 21, 2013 at 12:46 Permalink

    I am a bit against loading the dependencies from CDN without a fallback and also during development time. I had to remove the tweenlite/cssplugin and mousewheel and link them through script tags. I believe this would be less confusing, an option could be good too to let the dev decide himself.

    Also is the tweenlite/cssplugin really required? I only see that you’re using it for just easing? Wouldn’t it be better to have the dev decide which easing plugin he wants to use?

    Great work on the update though.

    Reply
    • malihu
      Posted on February 21, 2013 at 14:15 Permalink

      Hello and thanks for the feedback,

      The download archive contains multiple plugin files so the user is able to select which one to use.

      The production-ready plugin file (and the one I suggest using on the “How to use it” guide at the top) is jquery.mCustomScrollbar.concat.min.js. This file contains the plugin script and dependencies, concatenated and minified.

      jquery.mCustomScrollbar.js contains the plugin script and auto-loads dependencies via CDN. I kept this file so people that already using the un-minified version can upgrade easily.

      Additionally, js directory contains the plugin script and all dependencies separately (minified and uncompressed).
      In the loading_each_script_separately.html I’m loading each script separately from CDN with fallback to local.

      GSAP TweenLite and CSSPlugin do all the scrolling animations so both are essential for the plugin. I’ve moved from jQuery $.animate to TweenLite because scrolling performance is significantly better (much smoother scrolling with twice the FPS). GSAP tweens also handle the callbacks way more efficiently than $.animate (and with half the code).

      Reply
      • Gapi
        Posted on February 21, 2013 at 16:03 Permalink

        Performance is awesome now, but for some TweenLite license could be a problem.

        Reply
        • malihu
          Posted on February 21, 2013 at 16:16 Permalink

          Indeed, although the standard “No Charge” license applies to the vast majority of projects and websites.

          Reply
  5. peter
    Posted on February 20, 2013 at 22:42 Permalink

    create: function(event, ui) { $("#obj").mCustomScrollbar({ advanced:{ updateOnContentResize: true } }); },

    Thi is pat of code of autocomplete, with create autocomplete i will try do mCustomScrollbar, but i dont have any result of search

    Reply
  6. peter
    Posted on February 20, 2013 at 22:24 Permalink

    New version (2.7) has a bug, if object dosen`t have height value, scrollbar dosen`t work. Please fix it.

    Reply
    • malihu
      Posted on February 21, 2013 at 01:33 Permalink

      All scrollbars (including browser native scrollbars) require a height value (or at least a max-height) value in order to have a purpose and work. Otherwise the content just expands its container (which the default CSS height:auto does).

      Reply
      • peter
        Posted on February 21, 2013 at 16:51 Permalink

        I`v tried use max-height it dosen`t work, but in prev version was all right

        Reply
        • malihu
          Posted on February 21, 2013 at 17:18 Permalink

          I’ve made a max-height example here (so you can view its source):
          http://manos.malihu.gr/tuts/custom-scrollbar-plugin/max-height_example.html

          Might also wanna check your CSS positioning and parent height values.

          Reply
          • John John Gonzales
            Posted on February 21, 2013 at 22:00 Permalink

            I believe I have the same issue as Peter.

            So I’ve played a little bit with the max-height example and this is what I found. After changing max-height to 100% for div.content, and adding more paragraphs in #content_1 to make sure it will not fit in one window, the scrollbar doesn’t show up when loading the page.
            Only if you resize (vertical or horizontal) the window, you’ll get the scrollbar.

            Hope this helps you.

          • malihu
            Posted on February 22, 2013 at 01:48 Permalink

            I see. I’ll update the script asap.
            Thanks for the details and feedback!

            Edit: Bug fixed, script updated.

        • malihu
          Posted on February 22, 2013 at 02:09 Permalink

          Max-height/width bug fixed. Please re-download script.

          Reply
  7. Gapi
    Posted on February 20, 2013 at 21:04 Permalink

    Thanks for update.

    So far I noticed just one problem.

    You are loading plugin dependencies from “http” and if I run my script in Chrome from “https”, dependencies get rejected.

    Just change url in code to https and everything works well. =)

    Reply
    • malihu
      Posted on February 21, 2013 at 01:52 Permalink

      Thanks a lot for the feedback.
      I’ve updated jquery.mCustomScrollbar.js (which loads dependencies via CDN) to use protocol-relative url.

      Reply
  8. Peter
    Posted on February 20, 2013 at 20:55 Permalink

    tell me please how connect this plugin with JqueryUI autocmplete.
    I`v tied but i didn`t have any results

    Reply
  9. Carlos
    Posted on February 20, 2013 at 14:33 Permalink

    Is there any way to put the horizontal and vertical scroll together?

    Reply
    • malihu
      Posted on February 21, 2013 at 01:36 Permalink

      Not at the moment. Probably on the next version.

      Reply
      • TH AS NE EM
        Posted on February 28, 2013 at 09:13 Permalink

        When?

        Reply
        • malihu
          Posted on February 28, 2013 at 16:29 Permalink

          Can’t really say. Maybe in 2 weeks, maybe in a couple of months…

          Reply
  10. Jack
    Posted on February 20, 2013 at 01:27 Permalink

    Is there any way to have an option to enable Page Up/Down/Home/End when the user clicks on a scroll area?

    Reply
    • malihu
      Posted on February 21, 2013 at 01:40 Permalink

      There’s no option, but I’ve made a demo using up/down keyboard keys here:
      http://manos.malihu.gr/tuts/custom-scrollbar-plugin/keyboard_nav_example.html
      You could check its code and bind the keys you want.

      Reply
      • Viduranga
        Posted on March 4, 2013 at 13:27 Permalink

        Hi

        Is there any way to use both up,down and left right arrows to scroll vertically and horizontally. I got vertical scroll working by using your code but cannot figure out horizontal scroll. Please give me a little help
        Thanks again for above code

        Reply
  11. Leo
    Posted on February 19, 2013 at 18:26 Permalink

    Hi!
    Your scrollbar is as beautiful as easy to install and I was thinking of placing it in a photography website I’m making.
    However I ecountered a strange bug witch makes a div with text in it malfunction(I’m using your default css and files)!
    Just a few lines of text are shown, with a huge ammout of space between them, and the scrollbar doesen’t scroll back !
    Thanks for your attention and amazing work!!!
    Leo

    Reply
  12. eep
    Posted on February 19, 2013 at 16:55 Permalink

    How can I get the scrolled amount from top or left?

    Reply
  13. Liam HT
    Posted on February 19, 2013 at 14:16 Permalink

    Hi, I love the look and freedom the code allows me to do, however i do have a problem. i can get the silder to show, but not to be able to scroll through the content.

    everything seems to be correct (The size of the scrollbar compared to what I want to scroll, 12 pictures)

    if anyone can help me, please do.
    It is used on the “Team” page on my test website located at http://liamtest.99k.org/

    any help would be greatly appreciated.

    thanks in advance

    Reply
  14. Carlos
    Posted on February 19, 2013 at 11:59 Permalink

    BTW, you should show comments ordered by date desc, it doesn’t make much sense to always show the older comments first.

    Reply
  15. Carlos
    Posted on February 19, 2013 at 11:58 Permalink

    Hello,

    Great work, I’m using it on my website.

    But I’m having a problem, I have a div where I have some jQuery accordions (http://jqueryui.com/accordion/), they all start closed, and the page doesn’t need a scrool, but when I open one (it contains a long text) it overflows the div and the scroll bar doesn’t show up, making impossible to scroll the page. If I load the page with one accordion open, the scroll bar shows up, but I need to load the page with all them closed.

    Can you please give me some support?

    Regards,

    Reply
  16. rori
    Posted on February 19, 2013 at 11:09 Permalink

    Shouldn’t set_width and set_height be just width/height or setWidth, setHeight?
    Just a nitpick but I think it looks weird for the plugin’s API 😀

    Also could you please add an option to show (fadein/out) the scrollbar on mouse hover/swipe overlayed (only if it is needed), like they do on mobile?

    Reply
    • malihu
      Posted on February 20, 2013 at 20:33 Permalink

      I’ve just added such option (autoHideScrollbar) on the latest version 😉

      You’re right about set_width and set_height but I don’t really wanna change it as I want the plugin to be backwards compatible. I would definitely change few names if I had the chance hehe

      Reply
  17. Richard
    Posted on February 18, 2013 at 22:25 Permalink

    Just tested the scrollbar with preview in Chrome, and it displays correctly, so the issue would appear to be an IE9 compatability problem.

    Any fixes for this?

    Reply
  18. Richard
    Posted on February 18, 2013 at 20:27 Permalink

    Meant to also add that I tried the scrollbar on a Div with other divisions nested within (scrollbar only on the outer Div), and it didn’t work.

    Is this something on my end that I’m doing wrong, or will your scrollbars not work with nested Divs?

    Reply
    • malihu
      Posted on February 20, 2013 at 20:34 Permalink

      New version fully supports nested scrollbars

      Reply
      • Richard
        Posted on February 21, 2013 at 01:41 Permalink

        Thanks.

        How about my second question about how the scroll bar symbol is offset from the scrollbar container? This happens only in IE and not Chrome.

        Any fixes for this?

        Reply
        • malihu
          Posted on February 21, 2013 at 01:57 Permalink

          Is this a Dreamweaver preview issue?

          Reply
  19. Richard
    Posted on February 18, 2013 at 20:24 Permalink

    Added your scrollbar in Dreamweaver, and it looks great in Live View, but when I preview it in IE9, the scroll bar does not display within the container, and it is a simple rectangle and not the nice oval I see in your examples and in Live View. Any thoughts on what the issue might be?

    I also want to say that your tutorials and general instructions are first rate; very easy to follow and made everything very easy.

    Reply
  20. manu
    Posted on February 18, 2013 at 11:05 Permalink

    Hi malihu

    I implemented the scrollbar and it works great , now i have a requirement that the scrollbar to be working while pressing “up” and “down” arrow keys, is there any way to bind keypress event into the plugin.
    Thanks in advance

    Reply
  21. rendy
    Posted on February 17, 2013 at 23:35 Permalink

    Hi , First of all it is great plugin and very helpful, but i have only one problem. i am using jquery Accordion inside the scroller and i enabled the option updateOnContentResize:true because i have dynamic content. In according i have 5 items one item is small which does not require scroller so if i click on other items it works fine but when i click on that particular item i hide the few top lines but if i see the in view source data is there.
    Any idea or suggest.
    Thanking you in advance

    Reply
  22. Shreyo
    Posted on February 17, 2013 at 10:13 Permalink

    works like a butter smooth! i used it in wordpress. thanks for the work and thumbs up! 🙂

    Reply
  23. daniel
    Posted on February 16, 2013 at 18:59 Permalink

    Hello.

    I try to use it on http://geko.przyprawyswiata.pl but I can’t run it.
    Slider looks great but I can’t use it. I can’t move it and mose whele dosn’t work too.

    Can some one help me ?

    Reply
  24. Nickl
    Posted on February 15, 2013 at 15:47 Permalink

    Hi all,
    great job! I like your work and I’m going to integrate it in my website.

    But I cannot understand the “mouseWheel” property: here in the explanations you say that it could be set to true, false, and “pixels”, the default. If is set to false, the mouse wheel is disabled, but what’s the difference between true and “pixels”?

    Reply
    • malihu
      Posted on February 15, 2013 at 16:35 Permalink

      Hello and thanks for your comments.
      On previous version I used to have a different (non-pixels) mousewheel scrolling, so I just left it in order to be backwards compatible.

      Tomorrow I’m releasing the new version in which mouseWheel can be either true or false (enable/disable) and its scrolling amount is set in mouseWheelPixels option parameter which by default will be auto (the script calculates the pixels scrolling amount according to content length).

      Reply
      • Nickl
        Posted on February 15, 2013 at 17:02 Permalink

        Thank you, now it’s clear.

        Reply
  25. Dmitry
    Posted on February 15, 2013 at 12:06 Permalink

    Tell me please, how can I use mCustomScrollbar, if I have one scrolling div into another scrolling div (nested case) ?

    Reply
    • malihu
      Posted on February 15, 2013 at 16:23 Permalink

      Tomorrow I’ll release the new version which among others, supports nested scrollbars.

      Reply
      • mr none
        Posted on February 18, 2013 at 14:47 Permalink

        tomorrow ? 🙂

        Reply
        • malihu
          Posted on February 18, 2013 at 18:04 Permalink

          lol 🙂
          Sorry for the delay. I decided to add some additional features so I’ll publish it in a few hours.

          Reply
        • malihu
          Posted on February 20, 2013 at 20:36 Permalink

          New version (2.7) released (finally!)

          Reply
  26. kontrol
    Posted on February 14, 2013 at 22:25 Permalink

    Dont know if you’ve caught it, but you’ve got a bug where if you have a scroll with no buttons, and the mCSB_dragger_bar has a border, you can drag the bar off its track… not on the first drag, but once its at its bottom edge, you can grab it and drag it again and it will move down further than the edge of the rail. Looking at your code now as well to put in a fix.

    Reply
    • kontrol
      Posted on February 14, 2013 at 22:28 Permalink

      forgot to mention, this can be done in your demo files easy, just grab the multiple_scrollbars_example.html, add a 1 px border to the .mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar class in the css, and drag down multiple times.

      Reply
      • malihu
        Posted on February 15, 2013 at 02:08 Permalink

        For a quick solution, add:
        box-sizing:border-box;
        to .mCSB_dragger_bar

        Reply
        • kontrol
          Posted on February 15, 2013 at 18:39 Permalink

          Thanks – worked like a charm! impressed with your lightning fast response time!!

          Reply
  27. Chris
    Posted on February 14, 2013 at 21:33 Permalink

    Great work, makes my clients very happy! One issue maybe you can help with?

    I don’t see this happening on my Mac, but for users on PC, on initial page load the ugly scrollbars “flash” for a moment until the style is overridden by your script.

    My thought was this is because of the $(window).load vs. $(document).ready (but I’m not an expert with jQuery). We do have dynamic content loading in the container…some WordPress custom post types that are images in a filtering grid.

    Any ideas? I know this happens on Windows based systems in Chrome (and I’m sure other browsers) You can see the site here: http://trademarkvisual.com/

    Thanks!!!

    Reply
    • malihu
      Posted on February 15, 2013 at 02:12 Permalink

      Since you do load images inside your content, calling the scrollbar on document ready wouldn’t do any good. A quick solution would be to make your content initially overflow:hidden (instead of auto).

      Reply
  28. highdawndesign
    Posted on February 14, 2013 at 18:05 Permalink

    Hello,

    first of all: GREAT plugin. But I’m having a fuctionality problem. When you have “normal” scrollable divs in your page, the main page will scroll, when you reached the end of the scroll of the div. But I’m not getting it done with the plugin…

    Reply
    • malihu
      Posted on February 14, 2013 at 18:23 Permalink

      Hello,
      This will be fixed on the next version (update coming very soon).

      Reply
    • malihu
      Posted on February 20, 2013 at 20:37 Permalink

      Fixed on the latest version (2.7)

      Reply
  29. meugel
    Posted on February 14, 2013 at 17:51 Permalink

    Hello,

    thanks for this great plugin! I am trying to implement it with jquery-ui tabs, but I am a newby to jQuery. I found “Hiding & showing content blocks with custom scrollbars” in your article, but the example is not exactly the right solution for me:

    I have initially two closed (!) content areas, and clicking on one tab the first content appears, clicking on the other, the first content disappears and the second appears.

    It all works fine, except the custom content scroller, always showing me the “normal” default scrollbars. I am working in a password protected testing space, so if you need I can give you access to my server.

    Thanks!

    Regards, Meugel

    Reply
  30. vvvoid
    Posted on February 14, 2013 at 08:14 Permalink

    Broken with latest jQuery.

    Reply
    • malihu
      Posted on February 14, 2013 at 18:22 Permalink

      Next version (available in a couple of days) will be compatible.

      Reply
      • Tomas Sandven
        Posted on February 19, 2013 at 14:50 Permalink

        jQuery 1.9 has removed $.browser, so mCustomScrollbar doesn’t work with it. Can you fix that?

        Reply
      • John
        Posted on February 28, 2013 at 16:52 Permalink

        I upgraded from version 2.3 to 2.7 and 2.7 is soooo laggy scrolling up and down its almost unusable. Any ideas? i have all files that the plugin uses updated.

        Reply
        • malihu
          Posted on February 28, 2013 at 17:18 Permalink

          Can you provide some info or a link to your implementation? Do you get any console errors?

          Reply
          • John
            Posted on February 28, 2013 at 17:23 Permalink

            I don’t get any errors at all using firebug. I tested it on my local server so I didnt upload it to my live server. I’ll go ahead and test this again since you are not aware of any lag like this

          • John
            Posted on February 28, 2013 at 18:34 Permalink

            Never had lag on FF before on version 2.3. Well i think IE9 did run smoother. The lag im talking about now though is really bad though. Its not minor lag. Really choppy. Ok i was the same guy that emailed you about the zoom out bug. Your new version of scrollbar fixes that problem so that problem is gone thank god. I read your release notes probably one of those height bugs you mention you fixed. How about i just give you log in infor so you can see the firefox lag? can send it ot your email [email protected]

        • John
          Posted on February 28, 2013 at 17:19 Permalink

          because of the lag i had to convert back to the old version. its like crazy lag. It jerks when you scroll up and down majorly. hoping you can fix this. Will keep checking back to see if you have

          Reply
          • malihu
            Posted on February 28, 2013 at 17:38 Permalink

            Do you get lag on the demos I’ve posted as well?

        • John
          Posted on February 28, 2013 at 18:00 Permalink

          Alright i narrowed down the lag only happening with FF. Your demo’s don’t lag on either IE9 or FF but i did kinda notice it wasnt as smooth in FF as in IE. So probably what ever is causing that slight problem is making the problem larger on my project.

          Reply
          • John
            Posted on February 28, 2013 at 18:02 Permalink

            btw im runing Firefox 19 at the moment

          • malihu
            Posted on February 28, 2013 at 18:18 Permalink

            Firefox among browsers, has the most lag on javascript animations and IE9, webkit browsers and Opera almost always perform better.
            In general, except for the browser’s rendering engine itself, there are certain CSS properties that usually make animations less smooth (e.g. scaled images, shadows, masks etc.).

Comments pages: 1 29 30 31 32 33 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