重构华夏erp的整体ui风格
This commit is contained in:
193
erp_web/js/jquery-plugins/jquery.PrintArea.js
Normal file
193
erp_web/js/jquery-plugins/jquery.PrintArea.js
Normal file
@@ -0,0 +1,193 @@
|
||||
/**
|
||||
* Version 2.4.0 Copyright (C) 2013
|
||||
* Tested in IE 11, FF 28.0 and Chrome 33.0.1750.154
|
||||
* No official support for other browsers, but will TRY to accommodate challenges in other browsers.
|
||||
* Example:
|
||||
* Print Button: <div id="print_button">Print</div>
|
||||
* Print Area : <div class="PrintArea" id="MyId" class="MyClass"> ... html ... </div>
|
||||
* Javascript : <script>
|
||||
* $("div#print_button").click(function(){
|
||||
* $("div.PrintArea").printArea( [OPTIONS] );
|
||||
* });
|
||||
* </script>
|
||||
* options are passed as json (example: {mode: "popup", popClose: false})
|
||||
*
|
||||
* {OPTIONS} | [type] | (default), values | Explanation
|
||||
* --------- | --------- | ---------------------- | -----------
|
||||
* @mode | [string] | (iframe),popup | printable window is either iframe or browser popup
|
||||
* @popHt | [number] | (500) | popup window height
|
||||
* @popWd | [number] | (400) | popup window width
|
||||
* @popX | [number] | (500) | popup window screen X position
|
||||
* @popY | [number] | (500) | popup window screen Y position
|
||||
* @popTitle | [string] | ('') | popup window title element
|
||||
* @popClose | [boolean] | (false),true | popup window close after printing
|
||||
* @extraCss | [string] | ('') | comma separated list of extra css to include
|
||||
* @retainAttr | [string[]] | ["id","class","style"] | string array of attributes to retain for the containment area. (ie: id, style, class)
|
||||
* @standard | [string] | strict, loose, (html5) | Only for popup. For html 4.01, strict or loose document standard, or html 5 standard
|
||||
* @extraHead | [string] | ('') | comma separated list of extra elements to be appended to the head tag
|
||||
*/
|
||||
(function($) {
|
||||
var counter = 0;
|
||||
var modes = { iframe : "iframe", popup : "popup" };
|
||||
var standards = { strict : "strict", loose : "loose", html5 : "html5" };
|
||||
var defaults = { mode : modes.iframe,
|
||||
standard : standards.html5,
|
||||
popHt : 500,
|
||||
popWd : 400,
|
||||
popX : 200,
|
||||
popY : 200,
|
||||
popTitle : '',
|
||||
popClose : false,
|
||||
extraCss : '',
|
||||
extraHead : '',
|
||||
retainAttr : ["id","class","style"] };
|
||||
|
||||
var settings = {};//global settings
|
||||
|
||||
$.fn.printArea = function( options )
|
||||
{
|
||||
$.extend( settings, defaults, options );
|
||||
|
||||
counter++;
|
||||
var idPrefix = "printArea_";
|
||||
$( "[id^=" + idPrefix + "]" ).remove();
|
||||
|
||||
settings.id = idPrefix + counter;
|
||||
|
||||
var $printSource = $(this);
|
||||
|
||||
var PrintAreaWindow = PrintArea.getPrintWindow();
|
||||
|
||||
PrintArea.write( PrintAreaWindow.doc, $printSource );
|
||||
|
||||
setTimeout( function () { PrintArea.print( PrintAreaWindow ); }, 1000 );
|
||||
};
|
||||
|
||||
var PrintArea = {
|
||||
print : function( PAWindow ) {
|
||||
var paWindow = PAWindow.win;
|
||||
|
||||
$(PAWindow.doc).ready(function(){
|
||||
paWindow.focus();
|
||||
paWindow.print();
|
||||
|
||||
if ( settings.mode == modes.popup && settings.popClose )
|
||||
setTimeout(function() { paWindow.close(); }, 2000);
|
||||
});
|
||||
},
|
||||
write : function ( PADocument, $ele ) {
|
||||
PADocument.open();
|
||||
PADocument.write( PrintArea.docType() + "<html>" + PrintArea.getHead() + PrintArea.getBody( $ele ) + "</html>" );
|
||||
PADocument.close();
|
||||
},
|
||||
docType : function() {
|
||||
if ( settings.mode == modes.iframe ) return "";
|
||||
|
||||
if ( settings.standard == standards.html5 ) return "<!DOCTYPE html>";
|
||||
|
||||
var transitional = settings.standard == standards.loose ? " Transitional" : "";
|
||||
var dtd = settings.standard == standards.loose ? "loose" : "strict";
|
||||
|
||||
return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01' + transitional + '//EN" "http://www.w3.org/TR/html4/' + dtd + '.dtd">';
|
||||
},
|
||||
getHead : function() {
|
||||
var extraHead = "";
|
||||
var links = "";
|
||||
|
||||
if ( settings.extraHead ) settings.extraHead.replace( /([^,]+)/g, function(m){ extraHead += m });
|
||||
|
||||
$(document).find("link")
|
||||
.filter(function(){ // Requirement: <link> element MUST have rel="stylesheet" to be considered in print document
|
||||
var relAttr = $(this).attr("rel");
|
||||
return ($.type(relAttr) === 'undefined') == false && relAttr.toLowerCase() == 'stylesheet';
|
||||
})
|
||||
.filter(function(){ // Include if media is undefined, empty, print or all
|
||||
var mediaAttr = $(this).attr("media");
|
||||
return $.type(mediaAttr) === 'undefined' || mediaAttr == "" || mediaAttr.toLowerCase() == 'print' || mediaAttr.toLowerCase() == 'all'
|
||||
})
|
||||
.each(function(){
|
||||
links += '<link type="text/css" rel="stylesheet" href="' + $(this).attr("href") + '" >';
|
||||
});
|
||||
if ( settings.extraCss ) settings.extraCss.replace( /([^,\s]+)/g, function(m){ links += '<link type="text/css" rel="stylesheet" href="' + m + '">' });
|
||||
|
||||
return "<head><title>" + settings.popTitle + "</title>" + extraHead + links + "</head>";
|
||||
},
|
||||
getBody : function ( elements ) {
|
||||
var htm = "";
|
||||
var attrs = settings.retainAttr;
|
||||
elements.each(function() {
|
||||
var ele = PrintArea.getFormData( $(this) );
|
||||
|
||||
var attributes = ""
|
||||
for ( var x = 0; x < attrs.length; x++ )
|
||||
{
|
||||
var eleAttr = $(ele).attr( attrs[x] );
|
||||
if ( eleAttr ) attributes += (attributes.length > 0 ? " ":"") + attrs[x] + "='" + eleAttr + "'";
|
||||
}
|
||||
|
||||
htm += '<div ' + attributes + '>' + $(ele).html() + '</div>';
|
||||
});
|
||||
|
||||
return "<body>" + htm + "</body>";
|
||||
},
|
||||
getFormData : function ( ele ) {
|
||||
var copy = ele.clone();
|
||||
var copiedInputs = $("input,select,textarea", copy);
|
||||
$("input,select,textarea", ele).each(function( i ){
|
||||
var typeInput = $(this).attr("type");
|
||||
if ($.type(typeInput) === 'undefined') typeInput = $(this).is("select") ? "select" : $(this).is("textarea") ? "textarea" : "";
|
||||
var copiedInput = copiedInputs.eq( i );
|
||||
|
||||
if ( typeInput == "radio" || typeInput == "checkbox" ) copiedInput.attr( "checked", $(this).is(":checked") );
|
||||
else if ( typeInput == "text" ) copiedInput.attr( "value", $(this).val() );
|
||||
else if ( typeInput == "select" )
|
||||
$(this).find( "option" ).each( function( i ) {
|
||||
if ( $(this).is(":selected") ) $("option", copiedInput).eq( i ).attr( "selected", true );
|
||||
});
|
||||
else if ( typeInput == "textarea" ) copiedInput.text( $(this).val() );
|
||||
});
|
||||
return copy;
|
||||
},
|
||||
getPrintWindow : function () {
|
||||
switch ( settings.mode )
|
||||
{
|
||||
case modes.iframe :
|
||||
var f = new PrintArea.Iframe();
|
||||
return { win : f.contentWindow || f, doc : f.doc };
|
||||
case modes.popup :
|
||||
var p = new PrintArea.Popup();
|
||||
return { win : p, doc : p.doc };
|
||||
}
|
||||
},
|
||||
Iframe : function () {
|
||||
var frameId = settings.id;
|
||||
var iframeStyle = 'border:0;position:absolute;width:0px;height:0px;right:0px;top:0px;';
|
||||
var iframe;
|
||||
|
||||
try
|
||||
{
|
||||
iframe = document.createElement('iframe');
|
||||
document.body.appendChild(iframe);
|
||||
$(iframe).attr({ style: iframeStyle, id: frameId, src: "#" + new Date().getTime() });
|
||||
iframe.doc = null;
|
||||
iframe.doc = iframe.contentDocument ? iframe.contentDocument : ( iframe.contentWindow ? iframe.contentWindow.document : iframe.document);
|
||||
}
|
||||
catch( e ) { throw e + ". iframes may not be supported in this browser."; }
|
||||
|
||||
if ( iframe.doc == null ) throw "Cannot find document.";
|
||||
|
||||
return iframe;
|
||||
},
|
||||
Popup : function () {
|
||||
var windowAttr = "location=yes,statusbar=no,directories=no,menubar=no,titlebar=no,toolbar=no,dependent=no";
|
||||
windowAttr += ",width=" + settings.popWd + ",height=" + settings.popHt;
|
||||
windowAttr += ",resizable=yes,screenX=" + settings.popX + ",screenY=" + settings.popY + ",personalbar=no,scrollbars=yes";
|
||||
|
||||
var newWin = window.open( "", "_blank", windowAttr );
|
||||
|
||||
newWin.doc = newWin.document;
|
||||
|
||||
return newWin;
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
||||
1277
erp_web/js/jquery-plugins/jquery.form.js
Normal file
1277
erp_web/js/jquery-plugins/jquery.form.js
Normal file
File diff suppressed because it is too large
Load Diff
2604
erp_web/js/jquery-plugins/jquery.inputmask.js
Normal file
2604
erp_web/js/jquery-plugins/jquery.inputmask.js
Normal file
File diff suppressed because it is too large
Load Diff
68
erp_web/js/jquery-plugins/jquery.resizeEnd.js
Normal file
68
erp_web/js/jquery-plugins/jquery.resizeEnd.js
Normal file
@@ -0,0 +1,68 @@
|
||||
// Generated by CoffeeScript 1.6.3
|
||||
(function($, window, document) {
|
||||
var ResizeEnd, defaults, plugin;
|
||||
plugin = 'resizeEnd';
|
||||
defaults = {
|
||||
delay: 250
|
||||
};
|
||||
ResizeEnd = function(element, options, callback) {
|
||||
if (typeof options === 'function') {
|
||||
callback = options;
|
||||
options = {};
|
||||
}
|
||||
callback = callback || null;
|
||||
this.element = element;
|
||||
this.settings = $.extend({}, defaults, options);
|
||||
this._defaults = defaults;
|
||||
this._name = plugin;
|
||||
this._timeout = false;
|
||||
this._callback = callback;
|
||||
return this.init();
|
||||
};
|
||||
ResizeEnd.prototype = {
|
||||
init: function() {
|
||||
var $el, _this;
|
||||
_this = this;
|
||||
$el = $(this.element);
|
||||
return $el.on('resize', function() {
|
||||
return _this.initResize();
|
||||
});
|
||||
},
|
||||
getUTCDate: function(d) {
|
||||
var curdate;
|
||||
d = d || new Date();
|
||||
curdate = Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds());
|
||||
return curdate;
|
||||
},
|
||||
initResize: function() {
|
||||
var _this;
|
||||
_this = this;
|
||||
_this.controlTime = _this.getUTCDate();
|
||||
if (_this._timeout === false) {
|
||||
_this._timeout = true;
|
||||
return setTimeout(function() {
|
||||
return _this.runCallback(_this);
|
||||
}, _this.settings.delay);
|
||||
}
|
||||
},
|
||||
runCallback: function(_this) {
|
||||
var nowTime;
|
||||
nowTime = _this.getUTCDate();
|
||||
if (nowTime - _this.controlTime < _this.settings.delay) {
|
||||
return setTimeout(function() {
|
||||
return _this.runCallback(_this);
|
||||
}, _this.settings.delay);
|
||||
} else {
|
||||
_this._timeout = false;
|
||||
return _this._callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
return $.fn[plugin] = function(options, callback) {
|
||||
return this.each(function() {
|
||||
if (!$.data(this, 'plugin_' + plugin)) {
|
||||
return $.data(this, 'plugin_' + plugin, new ResizeEnd(this, options, callback));
|
||||
}
|
||||
});
|
||||
};
|
||||
})(jQuery, window, document);
|
||||
476
erp_web/js/jquery-plugins/jquery.slimscroll.js
Normal file
476
erp_web/js/jquery-plugins/jquery.slimscroll.js
Normal file
@@ -0,0 +1,476 @@
|
||||
/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
|
||||
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||
*
|
||||
* Version: 1.3.8
|
||||
*
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
$.fn.extend({
|
||||
slimScroll: function(options) {
|
||||
|
||||
var defaults = {
|
||||
|
||||
// width in pixels of the visible scroll area
|
||||
width : 'auto',
|
||||
|
||||
// height in pixels of the visible scroll area
|
||||
height : '250px',
|
||||
|
||||
// width in pixels of the scrollbar and rail
|
||||
size : '7px',
|
||||
|
||||
// scrollbar color, accepts any hex/color value
|
||||
color: '#000',
|
||||
|
||||
// scrollbar position - left/right
|
||||
position : 'right',
|
||||
|
||||
// distance in pixels between the side edge and the scrollbar
|
||||
distance : '1px',
|
||||
|
||||
// default scroll position on load - top / bottom / $('selector')
|
||||
start : 'top',
|
||||
|
||||
// sets scrollbar opacity
|
||||
opacity : .4,
|
||||
|
||||
// enables always-on mode for the scrollbar
|
||||
alwaysVisible : false,
|
||||
|
||||
// check if we should hide the scrollbar when user is hovering over
|
||||
disableFadeOut : false,
|
||||
|
||||
// sets visibility of the rail
|
||||
railVisible : false,
|
||||
|
||||
// sets rail color
|
||||
railColor : '#333',
|
||||
|
||||
// sets rail opacity
|
||||
railOpacity : .2,
|
||||
|
||||
// whether we should use jQuery UI Draggable to enable bar dragging
|
||||
railDraggable : true,
|
||||
|
||||
// defautlt CSS class of the slimscroll rail
|
||||
railClass : 'slimScrollRail',
|
||||
|
||||
// defautlt CSS class of the slimscroll bar
|
||||
barClass : 'slimScrollBar',
|
||||
|
||||
// defautlt CSS class of the slimscroll wrapper
|
||||
wrapperClass : 'slimScrollDiv',
|
||||
|
||||
// check if mousewheel should scroll the window if we reach top/bottom
|
||||
allowPageScroll : false,
|
||||
|
||||
// scroll amount applied to each mouse wheel step
|
||||
wheelStep : 20,
|
||||
|
||||
// scroll amount applied when user is using gestures
|
||||
touchScrollStep : 200,
|
||||
|
||||
// sets border radius
|
||||
borderRadius: '7px',
|
||||
|
||||
// sets border radius of the rail
|
||||
railBorderRadius : '7px'
|
||||
};
|
||||
|
||||
var o = $.extend(defaults, options);
|
||||
|
||||
// do it for every element that matches selector
|
||||
this.each(function(){
|
||||
|
||||
var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
|
||||
barHeight, percentScroll, lastScroll,
|
||||
divS = '<div></div>',
|
||||
minBarHeight = 30,
|
||||
releaseScroll = false;
|
||||
|
||||
// used in event handlers and for better minification
|
||||
var me = $(this);
|
||||
|
||||
// ensure we are not binding it again
|
||||
if (me.parent().hasClass(o.wrapperClass))
|
||||
{
|
||||
// start from last bar position
|
||||
var offset = me.scrollTop();
|
||||
|
||||
// find bar and rail
|
||||
bar = me.siblings('.' + o.barClass);
|
||||
rail = me.siblings('.' + o.railClass);
|
||||
|
||||
getBarHeight();
|
||||
|
||||
// check if we should scroll existing instance
|
||||
if ($.isPlainObject(options))
|
||||
{
|
||||
// Pass height: auto to an existing slimscroll object to force a resize after contents have changed
|
||||
if ( 'height' in options && options.height == 'auto' ) {
|
||||
me.parent().css('height', 'auto');
|
||||
me.css('height', 'auto');
|
||||
var height = me.parent().parent().height();
|
||||
me.parent().css('height', height);
|
||||
me.css('height', height);
|
||||
} else if ('height' in options) {
|
||||
var h = options.height;
|
||||
me.parent().css('height', h);
|
||||
me.css('height', h);
|
||||
}
|
||||
|
||||
if ('scrollTo' in options)
|
||||
{
|
||||
// jump to a static point
|
||||
offset = parseInt(o.scrollTo);
|
||||
}
|
||||
else if ('scrollBy' in options)
|
||||
{
|
||||
// jump by value pixels
|
||||
offset += parseInt(o.scrollBy);
|
||||
}
|
||||
else if ('destroy' in options)
|
||||
{
|
||||
// remove slimscroll elements
|
||||
bar.remove();
|
||||
rail.remove();
|
||||
me.unwrap();
|
||||
return;
|
||||
}
|
||||
|
||||
// scroll content by the given offset
|
||||
scrollContent(offset, false, true);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
else if ($.isPlainObject(options))
|
||||
{
|
||||
if ('destroy' in options)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// optionally set height to the parent's height
|
||||
o.height = (o.height == 'auto') ? me.parent().height() : o.height;
|
||||
|
||||
// wrap content
|
||||
var wrapper = $(divS)
|
||||
.addClass(o.wrapperClass)
|
||||
.css({
|
||||
position: 'relative',
|
||||
overflow: 'hidden',
|
||||
width: o.width,
|
||||
height: o.height
|
||||
});
|
||||
|
||||
// update style for the div
|
||||
me.css({
|
||||
overflow: 'hidden',
|
||||
width: o.width,
|
||||
height: o.height
|
||||
});
|
||||
|
||||
// create scrollbar rail
|
||||
var rail = $(divS)
|
||||
.addClass(o.railClass)
|
||||
.css({
|
||||
width: o.size,
|
||||
height: '100%',
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',
|
||||
'border-radius': o.railBorderRadius,
|
||||
background: o.railColor,
|
||||
opacity: o.railOpacity,
|
||||
zIndex: 90
|
||||
});
|
||||
|
||||
// create scrollbar
|
||||
var bar = $(divS)
|
||||
.addClass(o.barClass)
|
||||
.css({
|
||||
background: o.color,
|
||||
width: o.size,
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
opacity: o.opacity,
|
||||
display: o.alwaysVisible ? 'block' : 'none',
|
||||
'border-radius' : o.borderRadius,
|
||||
BorderRadius: o.borderRadius,
|
||||
MozBorderRadius: o.borderRadius,
|
||||
WebkitBorderRadius: o.borderRadius,
|
||||
zIndex: 99
|
||||
});
|
||||
|
||||
// set position
|
||||
var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance };
|
||||
rail.css(posCss);
|
||||
bar.css(posCss);
|
||||
|
||||
// wrap it
|
||||
me.wrap(wrapper);
|
||||
|
||||
// append to parent div
|
||||
me.parent().append(bar);
|
||||
me.parent().append(rail);
|
||||
|
||||
// make it draggable and no longer dependent on the jqueryUI
|
||||
if (o.railDraggable){
|
||||
bar.bind("mousedown", function(e) {
|
||||
var $doc = $(document);
|
||||
isDragg = true;
|
||||
t = parseFloat(bar.css('top'));
|
||||
pageY = e.pageY;
|
||||
|
||||
$doc.bind("mousemove.slimscroll", function(e){
|
||||
currTop = t + e.pageY - pageY;
|
||||
bar.css('top', currTop);
|
||||
scrollContent(0, bar.position().top, false);// scroll content
|
||||
});
|
||||
|
||||
$doc.bind("mouseup.slimscroll", function(e) {
|
||||
isDragg = false;hideBar();
|
||||
$doc.unbind('.slimscroll');
|
||||
});
|
||||
return false;
|
||||
}).bind("selectstart.slimscroll", function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// on rail over
|
||||
rail.hover(function(){
|
||||
showBar();
|
||||
}, function(){
|
||||
hideBar();
|
||||
});
|
||||
|
||||
// on bar over
|
||||
bar.hover(function(){
|
||||
isOverBar = true;
|
||||
}, function(){
|
||||
isOverBar = false;
|
||||
});
|
||||
|
||||
// show on parent mouseover
|
||||
me.hover(function(){
|
||||
isOverPanel = true;
|
||||
showBar();
|
||||
hideBar();
|
||||
}, function(){
|
||||
isOverPanel = false;
|
||||
hideBar();
|
||||
});
|
||||
|
||||
// support for mobile
|
||||
me.bind('touchstart', function(e,b){
|
||||
if (e.originalEvent.touches.length)
|
||||
{
|
||||
// record where touch started
|
||||
touchDif = e.originalEvent.touches[0].pageY;
|
||||
}
|
||||
});
|
||||
|
||||
me.bind('touchmove', function(e){
|
||||
// prevent scrolling the page if necessary
|
||||
if(!releaseScroll)
|
||||
{
|
||||
e.originalEvent.preventDefault();
|
||||
}
|
||||
if (e.originalEvent.touches.length)
|
||||
{
|
||||
// see how far user swiped
|
||||
var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;
|
||||
// scroll content
|
||||
scrollContent(diff, true);
|
||||
touchDif = e.originalEvent.touches[0].pageY;
|
||||
}
|
||||
});
|
||||
|
||||
// set up initial height
|
||||
getBarHeight();
|
||||
|
||||
// check start position
|
||||
if (o.start === 'bottom')
|
||||
{
|
||||
// scroll content to bottom
|
||||
bar.css({ top: me.outerHeight() - bar.outerHeight() });
|
||||
scrollContent(0, true);
|
||||
}
|
||||
else if (o.start !== 'top')
|
||||
{
|
||||
// assume jQuery selector
|
||||
scrollContent($(o.start).position().top, null, true);
|
||||
|
||||
// make sure bar stays hidden
|
||||
if (!o.alwaysVisible) { bar.hide(); }
|
||||
}
|
||||
|
||||
// attach scroll events
|
||||
attachWheel(this);
|
||||
|
||||
function _onWheel(e)
|
||||
{
|
||||
// use mouse wheel only when mouse is over
|
||||
if (!isOverPanel) { return; }
|
||||
|
||||
var e = e || window.event;
|
||||
|
||||
var delta = 0;
|
||||
if (e.wheelDelta) { delta = -e.wheelDelta/120; }
|
||||
if (e.detail) { delta = e.detail / 3; }
|
||||
|
||||
var target = e.target || e.srcTarget || e.srcElement;
|
||||
if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {
|
||||
// scroll content
|
||||
scrollContent(delta, true);
|
||||
}
|
||||
|
||||
// stop window scroll
|
||||
if (e.preventDefault && !releaseScroll) { e.preventDefault(); }
|
||||
if (!releaseScroll) { e.returnValue = false; }
|
||||
}
|
||||
|
||||
function scrollContent(y, isWheel, isJump)
|
||||
{
|
||||
releaseScroll = false;
|
||||
var delta = y;
|
||||
var maxTop = me.outerHeight() - bar.outerHeight();
|
||||
|
||||
if (isWheel)
|
||||
{
|
||||
// move bar with mouse wheel
|
||||
delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();
|
||||
|
||||
// move bar, make sure it doesn't go out
|
||||
delta = Math.min(Math.max(delta, 0), maxTop);
|
||||
|
||||
// if scrolling down, make sure a fractional change to the
|
||||
// scroll position isn't rounded away when the scrollbar's CSS is set
|
||||
// this flooring of delta would happened automatically when
|
||||
// bar.css is set below, but we floor here for clarity
|
||||
delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);
|
||||
|
||||
// scroll the scrollbar
|
||||
bar.css({ top: delta + 'px' });
|
||||
}
|
||||
|
||||
// calculate actual scroll amount
|
||||
percentScroll = parseInt(bar.css('top')) / (me.outerHeight() - bar.outerHeight());
|
||||
delta = percentScroll * (me[0].scrollHeight - me.outerHeight());
|
||||
|
||||
if (isJump)
|
||||
{
|
||||
delta = y;
|
||||
var offsetTop = delta / me[0].scrollHeight * me.outerHeight();
|
||||
offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);
|
||||
bar.css({ top: offsetTop + 'px' });
|
||||
}
|
||||
|
||||
// scroll content
|
||||
me.scrollTop(delta);
|
||||
|
||||
// fire scrolling event
|
||||
me.trigger('slimscrolling', ~~delta);
|
||||
|
||||
// ensure bar is visible
|
||||
showBar();
|
||||
|
||||
// trigger hide when scroll is stopped
|
||||
hideBar();
|
||||
}
|
||||
|
||||
function attachWheel(target)
|
||||
{
|
||||
if (window.addEventListener)
|
||||
{
|
||||
target.addEventListener('DOMMouseScroll', _onWheel, false );
|
||||
target.addEventListener('mousewheel', _onWheel, false );
|
||||
}
|
||||
else
|
||||
{
|
||||
document.attachEvent("onmousewheel", _onWheel)
|
||||
}
|
||||
}
|
||||
|
||||
function getBarHeight()
|
||||
{
|
||||
// calculate scrollbar height and make sure it is not too small
|
||||
barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);
|
||||
bar.css({ height: barHeight + 'px' });
|
||||
|
||||
// hide scrollbar if content is not long enough
|
||||
var display = barHeight == me.outerHeight() ? 'none' : 'block';
|
||||
bar.css({ display: display });
|
||||
}
|
||||
|
||||
function showBar()
|
||||
{
|
||||
// recalculate bar height
|
||||
getBarHeight();
|
||||
clearTimeout(queueHide);
|
||||
|
||||
// when bar reached top or bottom
|
||||
if (percentScroll == ~~percentScroll)
|
||||
{
|
||||
//release wheel
|
||||
releaseScroll = o.allowPageScroll;
|
||||
|
||||
// publish approporiate event
|
||||
if (lastScroll != percentScroll)
|
||||
{
|
||||
var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
|
||||
me.trigger('slimscroll', msg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
releaseScroll = false;
|
||||
}
|
||||
lastScroll = percentScroll;
|
||||
|
||||
// show only when required
|
||||
if(barHeight >= me.outerHeight()) {
|
||||
//allow window scroll
|
||||
releaseScroll = true;
|
||||
return;
|
||||
}
|
||||
bar.stop(true,true).fadeIn('fast');
|
||||
if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); }
|
||||
}
|
||||
|
||||
function hideBar()
|
||||
{
|
||||
// only hide when options allow it
|
||||
if (!o.alwaysVisible)
|
||||
{
|
||||
queueHide = setTimeout(function(){
|
||||
if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)
|
||||
{
|
||||
bar.fadeOut('slow');
|
||||
rail.fadeOut('slow');
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
hideBar(); // ThinkGem 初始化完成滚动条自动隐藏
|
||||
|
||||
});
|
||||
|
||||
// maintain chainability
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
$.fn.extend({
|
||||
slimscroll: $.fn.slimScroll
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user