$.fn.initScroll = function(){ this.each(function(){ //创建包含内容的容器 $(this).wrapInner("
"); var $scrollContent = $(this).find(".scrollContent"); var contentHeight = $scrollContent.height(); var wrapperHeight = $(this).height(); if(contentHeight > wrapperHeight){ //创建滚动条 var $_scrollBarContainer = $("
"); var $_scrollBarBlock = $("
"); $_scrollBarBlock.css("opacity","0.5"); $_scrollBarContainer.append($_scrollBarBlock); $(this).append($_scrollBarContainer); //定义滚动条相关变量 var $scrollBarContainer = $(this).find(".scrollBarContainer"); var $scrollBarBlock = $(this).find(".scrollBarBlock"); //留出滚动条的位置 $scrollContent.css("padding-right", "36px"); //重新计算内容高度 contentHeight = $(this).find(".scrollContent").height(); //计算滑块大小 var scrollBarBlockHeight = wrapperHeight * $(this).find(".scrollBarContainer").height() / contentHeight; //设置滑块大小 //$scrollBarBlock.css("height",scrollBarBlockHeight); $scrollBarBlock.css("height",scrollBarBlockHeight); //滚动条滑块效果 $scrollBarBlock.hover(function(){ $(this).stop(true,true).animate({"opacity":"1"}); },function(){ $(this).stop(true,true).animate({"opacity":"0.5"}); }); //计算滑块可拖动距离 var scrollMaxLength = $(this).find(".scrollBarContainer").height() - scrollBarBlockHeight; //超出容器的内容高度 var scrollContentLength = contentHeight - wrapperHeight; //内容滚动比例 每一像素滚动条 var d = scrollContentLength/scrollMaxLength; //滚动效果 //是否开始滚动 var start = false; //滚动条开始滚动时的位置 var scrollStartY = 0; //鼠标按下时候的位置 var mouseStartY = 0; //鼠标拖动时的即时位置 var mouseMovingY = 0; $scrollBarBlock.mousedown(function(event){ event.preventDefault(); mouseStartY = event.pageY; scrollStartY = $scrollBarBlock.position().top; start = true; }); //防止鼠标拖出滑块的位置失效,一下方法针对document $(document).mouseup(function(){ //停止滚动 start = false; //滚动条样式效果 $scrollBarBlock.stop(true,true).animate({"opacity":"0.5"}); }).mousemove(function(event){ event.preventDefault(); if(start){ mouseMovingY = event.pageY; //计算滚动条要移动的距离,即鼠标移动的距离 var scrollLength = mouseMovingY - mouseStartY; //滚动条滚动的顶部即时位置 var scrollCurrentY = scrollStartY + scrollLength; if(scrollCurrentY < 0){ scrollCurrentY = 0; }else if(scrollCurrentY > scrollMaxLength){ scrollCurrentY = scrollMaxLength; } //设置滚动条即时位置及效果 $scrollBarBlock.stop(true,true).css({"top":scrollCurrentY, "opacity":"1"}); //计算内容滚动的即时值 var contentCurrentY = scrollCurrentY * d; //设置内容滚动即时值 $scrollContent.css("margin-top", -contentCurrentY); } }); //鼠标滚轮 $(".scrollBar").mousewheel(function(event, delta){ event.preventDefault(); //每次滚动内容的偏移量 var wheelLength = 24; //内容滚动时的初始值 var contentStartY = parseFloat($scrollContent.css("margin-top")); //console.log(contentStartY); //比例 var d = scrollMaxLength/scrollContentLength; if(delta < 0){ //滚动滚轮一次后的内容偏移量 var wheelContentY = contentStartY - 24; if(wheelContentY < -scrollContentLength){ wheelContentY = -scrollContentLength; } }else if(delta > 0){ //滚动滚轮一次后的内容偏移量 var wheelContentY = contentStartY + 24; if(wheelContentY > 0){ wheelContentY = 0; } } //设置内容偏移量 $scrollContent.css("margin-top", wheelContentY); //计算滚动条的偏移量 var wheelScrollY = -wheelContentY * d; //滚动条初始位置 var wheelScrollStartY = parseFloat($scrollBarBlock.css("margin-top")); //滚动条的偏移位置 var scrollCurrentY = wheelScrollY + wheelScrollStartY; //设置滚动条偏移量 $scrollBarBlock.css("top", scrollCurrentY); }); } }); }