失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 自定义滚动条3.0【javascript】

自定义滚动条3.0【javascript】

时间:2019-03-31 02:43:28

相关推荐

自定义滚动条3.0【javascript】

web前端|js教程

自定义,滚动条

web前端-js教程

支持任意形式(包括图片自定义)的美化扩展,跨浏览器支持

支持鼠标按住上、下箭按钮实现上下滚动

支持鼠标滚轮放于“滚动条区”滚动,而不仅限放于滚动内容区才滚

支持鼠标按住滚动条(未松开)并移出滚动区域仍然能拖拽滚动

滚动条子根据左边滚动内容高与可视区域高度比例等比例,且当滚动条细到一定程度时设置最小高度值,内容过少时隐藏滚动条子

支持鼠标在滚动条子的上下空白区间点击实现上、下定位滚动(模拟windows滚动条)

支持键盘上下方向键,滚动区滚完之后才轮到页面body滚

支持页面刷新后保留滚动条滚动位置(需浏览器支持或打开cookie)

鼠标放于自定义滚动区滚动滚轮,滚动区滚完之后才轮到页面body滚

在原来几个版本基础上代码重构,这回只需在渲染的div里追加一个名为”dumascroll” 的class即可自动渲染,而不设此class的不受影响

修复了以往版本所发现的bug:以往版本将来版本可继续扩展的功能有

1、增加空格键的“下方向”快速滚动支持(更好地模拟windows滚动条用户体验)

2、增加页面body的渲染支持

3、增加textarea的渲染支持

4、增加嵌套div的渲染支持(目前代码嵌套时有滚动的bug,被嵌套的div的滚动高度算法到这个版本时将大幅修改)

5、增加同时出现横向滚动条的支持(当有这方面需求时可以扩展)

通用内容管理系统免费源码,ubuntu系统变英文,node 爬虫 前端渲染,php class用法,seo外贸招聘lzw

演示:

在线印刷 源码,把vscode添加到右键,ubuntu重启cuda,tomcat怎么查内存,高蛋白爬虫,php获取服务器真实ip,长寿区seo推广哪家好lzw

用户注册页面模板源码,ubuntu设置权限命令,爬虫下载会员歌曲,php碎片,seo与spalzw

* { margin:0; padding:0; } body { margin:20px 0 400px 20px; font:12px Arial; } h1 { font-size:14px; } ol,ul { margin:20px; line-height:160%; } ul li { color:#f00; } .a1 { width:300px; height:190px; border:1px solid #f00; overflow:auto; } .a2 { width:600px; height:350px; margin:100px 0 100px 80px; border:1px solid #369; background:#eee url(/articleimg//07/6875/duma.jpg) no-repeat 50%; overflow:auto; } .dumascroll {} /*只需对需要渲染滚动条的div设置该class即可*/ .dumascroll_area {height:100%;overflow:hidden; } .dumascroll_bar,.dumascroll_handle,.dumascroll_handle_a,.dumascroll_arrow_up,.dumascroll_arrow_up_a,.dumascroll_arrow_down,.dumascroll_arrow_down_a {background-image:url(/articleimg//07/6875/un_bg_bar.jpg); } .dumascroll_bar {position:absolute;top:0;right:0;z-index:9;width:14px;height:100%;cursor:default;-moz-user-select:none;-khtml-user-select:none;user-select:none;background-repeat:repeat-y;background-position:-42px 0;float:left; } .dumascroll_arrow_up,.dumascroll_arrow_up_a,.dumascroll_handle,.dumascroll_handle_a,.dumascroll_arrow_down,.dumascroll_arrow_down_a {position:absolute;left:0; } .dumascroll_arrow_up,.dumascroll_arrow_up_a,.dumascroll_arrow_down,.dumascroll_arrow_down_a {width:100%;height:14px;color:#fff;text-align:center; } .dumascroll_arrow_up,.dumascroll_arrow_up_a { top:0; } .dumascroll_arrow_down,.dumascroll_arrow_down_a { bottom:0; } .dumascroll_handle,.dumascroll_handle_a { width:100%; background-repeat:repeat-y; } .dumascroll_arrow_up { background-position:0 0; } .dumascroll_arrow_up_a { background-position:-14px 0; } .dumascroll_handle { background-position:-28px 0; } .dumascroll_handle_a { background-position:-56px 0; } .dumascroll_arrow_down { background-position:-70px 0; } .dumascroll_arrow_down_a { background-position:-84px 0; }

var duma = {

$:function(o){ if(document.getElementById(o)) {return document.getElementById(o);} },

getStyle:function(o) { return o.currentStyle||document.defaultView.getComputedStyle(o,null); },

getOffset:function(o) {

var t = o.offsetTop,h = o.offsetHeight;

while(o = o.offsetParent) { t += o.offsetTop; }

return { top:t, height:h };

},

bind:function(o,eType,fn) {

if(o.addEventListener) { o.addEventListener(eType,fn,false); }

else if(o.attachEvent) { o.attachEvent(“on” + eType,fn); }

else { o[“on” + eType] = fn; }

},

stopEvent:function(e) {

e = e || window.event;

e.stopPropagation && (e.preventDefault(),e.stopPropagation()) || (e.cancelBubble = true,e.returnValue = false);

},

setCookie:function(c_name,value,expiredays) {

var exdate = new Date();

exdate.setDate(exdate.getDate() + expiredays);

document.cookie = c_name + “=” + escape(value) + ((expiredays == null) ? “” : “;expires=” + exdate.toGMTString());

},

getCookie:function(c_name) {

if(document.cookie.length > 0) {

c_start = document.cookie.indexOf(c_name + “=”);

if(c_start != -1) {

c_start = c_start + c_name.length + 1;

c_end = document.cookie.indexOf(“;”,c_start);

if(c_end == -1) { c_end = document.cookie.length; }

return unescape(document.cookie.substring(c_start,c_end));

}

}

return “”;

}

};

duma.BeautifyScrollBar = function(obj,arrowUpCss,arrowUpActiveCss,handleCss,handleActiveCss,arrowDownCss,arrowDownActiveCss) {

this.arrowUpInterval;

this.arrowDownInterval;

this.barMouseDownInterval;

this.relY;

this.id = obj;

this.obj = duma.$(this.id);

this.setObjCss(); //预先设置父容器的css定位才能让接下来的属性设置起作用

this.obj.innerHTML = ‘

‘ + this.obj.innerHTML + ‘

‘;

this.area = duma.$(obj + “Area”);

this.bar = duma.$(obj + “Bar”);

this.barPos;

this.arrowUp = this.bar.getElementsByTagName(“div”)[0];

this.arrowUpCss = arrowUpCss;

this.arrowUpActiveCss = arrowUpActiveCss;

this.handle = this.bar.getElementsByTagName(“div”)[1];

this.handleCss = handleCss;

this.handleActiveCss = handleActiveCss;

this.arrowDown = this.bar.getElementsByTagName(“div”)[2];

this.arrowDownCss = arrowDownCss;

this.arrowDownActiveCss = arrowDownActiveCss;

this.handleMinHeight = 15;

this.arrowUpHeight = parseInt(duma.getStyle(this.arrowUp).height);

this.arrowDownHeight = parseInt(duma.getStyle(this.arrowDown).height);

this.areaScrollHeight = this.area.scrollHeight;

this.handleHeight = parseInt(this.area.offsetHeight/this.area.scrollHeight * (this.bar.offsetHeight – this.arrowUpHeight – this.arrowDownHeight));

}

duma.BeautifyScrollBar.prototype = {

setObjCss:function() {

duma.getStyle(this.obj).position == “static” ? this.obj.style.position = “relative” : duma.getStyle(this.obj).backgroundColor == “transparent” ? this.obj.style.backgroundColor = “#fff” : null; //若容器本来就没有设position,则初始化为relative;若容器原来未设置背景色,则初始化为白色;

},

sethandle:function() {//当内容超多时设置拖拽条子的最小高度

this.handle.style.top = this.arrowUpHeight + “px”;

if(this.handleHeight > this.handleMinHeight) {

this.handleHeight 0 && that.area.scrollTop 0 ? this.area.scrollTop -= 80 : this.area.scrollTop += 80; //步长设80像素比较接近window滚动条的滚动速度

if(this.area.scrollTop > 0 && this.area.scrollTop < this.area.scrollHeight – this.area.offsetHeight){ duma.stopEvent(e); } this.setBarPos();},barDown:function(e) { var e = e || window.event,that = this, eY = e.clientY, mStep = this.bar.offsetHeight, documentScrollTop = document.documentElement.scrollTop || document.body.scrollTop, hOffset = duma.getOffset(this.handle), bOffset = duma.getOffset(this.bar); if(documentScrollTop + eY < hOffset.top) { this.barMouseDownInterval = setInterval(function(e){ that.area.scrollTop -= that.area.offsetHeight; if(that.area.scrollTop hOffset.top + hOffset.height) { this.barMouseDownInterval = setInterval(function(){

that.area.scrollTop += that.area.offsetHeight;

if(that.area.scrollTop >= (eY + documentScrollTop – bOffset.top – that.arrowUpHeight – hOffset.height)/(that.bar.offsetHeight – that.arrowUpHeight – that.arrowDownHeight) * that.area.scrollHeight) { that.clearBarMouseDownInterval(); }

that.setBarPos();

},80); }

duma.stopEvent(e);

},

arrowUpMouseDown:function(e) {

var that = this;

this.arrowUpInterval = setInterval(function(){ that.area.scrollTop -= 25; that.setBarPos(); },10);

this.arrowUp.className = this.arrowUpActiveCss;

duma.stopEvent(e);

},

arrowUpMouseUp:function() { this.clearArrowUpInterval(); this.arrowUp.className = this.arrowUpCss; },

arrowUpMouseOut:function() { this.clearArrowUpInterval(); this.arrowUp.className = this.arrowUpCss; },

arrowDownMouseDown:function(e) {

var that = this;

this.arrowDownInterval = setInterval(function(){ that.area.scrollTop += 25; that.setBarPos(); },10);

this.arrowDown.className = this.arrowDownActiveCss;

duma.stopEvent(e);

},

arrowDownMouseUp:function() { this.clearArrowDownInterval(); this.arrowDown.className = this.arrowDownCss; },

arrowDownMouseOut:function() { this.clearArrowDownInterval(); this.arrowDown.className = this.arrowDownCss; },

run:function(){

var that = this;

this.sethandle();

this.areaScroll();

this.getBarPos();

this.area.onscroll = function(){that.areaScroll()};

this.area.onmouseover = this.bar.onmouseover = function(event){that.areakeydown(event)};

this.area.onmouseout = this.bar.onmouseout = function(){document.onkeydown = null};

this.handle.onmousedown = function(event){that.handleMouseDown(event)};

this.bar.onmousedown = function(event){that.barDown(event)};

this.bar.onmouseup = function(){that.clearBarMouseDownInterval()};

this.bar.onmouseout = function(){that.clearBarMouseDownInterval()};

this.arrowUp.onmousedown = function(event){that.arrowUpMouseDown(event)};

this.arrowUp.onmouseup = function(){that.arrowUpMouseUp()};

this.arrowUp.onmouseout = function(){that.arrowUpMouseOut()};

this.arrowDown.onmousedown = function(event){that.arrowDownMouseDown(event)};

this.arrowDown.onmouseup = function(){that.arrowDownMouseUp()};

this.arrowDown.onmouseout = function(){that.arrowDownMouseOut()};

duma.bind(this.obj,”mousewheel”,function(event){that.barScroll(event)});

duma.bind(this.obj,”DOMMouseScroll”,function(event){that.barScroll(event)});

}

}

duma.BeautifyScrollBar.init = function() {

var o = document.getElementsByTagName(“div”),

oLen = o.length,

dumascrollClass = /\bdumascroll\b/,

oArr = [],

oArrLen = oArr.length;

for(var i=0; i

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我是第一个被渲染的,真不幸

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

我还是普通的,我不希望被渲染,我就不用你的class,拿我怎么样?哈哈哈!

22222

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

真倒霉啊,俺还是被嵌套渲染的,555555

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

笨哟你,嵌套就嵌套,你不用他class就不会被渲染,你看看我,羡慕吧

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

fsdfs

11111111

图片自定义滚动条3.0(Duma”自动渲染版”,也许世间万物都会变,但是真挚的爱,却永远留存在心中!)

支持任意形式(包括图片自定义)的美化扩展,跨浏览器支持

支持鼠标按住上、下箭按钮实现上下滚动

支持鼠标滚轮放于”滚动条区”滚动,而不仅限放于滚动内容区才滚

支持鼠标按住滚动条(未松开)并移出滚动区域仍然能拖拽滚动

滚动条子根据左边滚动内容高与可视区域高度比例等比例,且当滚动条细到一定程度时设置最小高度值,内容过少时隐藏滚动条子

支持鼠标在滚动条子的上下空白区间点击实现上、下定位滚动(模拟windows滚动条)

支持键盘上下方向键,滚动区滚完之后才轮到页面body滚

支持页面刷新后保留滚动条滚动位置(需浏览器支持或打开cookie)

鼠标放于自定义滚动区滚动滚轮,滚动区滚完之后才轮到页面body滚

在原来几个版本基础上代码重构,这回只需在渲染的div里追加一个名为”dumascroll” 的class即可自动渲染,而不设此class的不受影响

修复了以往版本所发现的bug:以往版本

将来版本可继续扩展的功能有:

增加空格键的”下方向”快速滚动支持(更好地模拟windows滚动条用户体验)

增加页面body的渲染支持

增加textarea的渲染支持

增加嵌套div的渲染支持(目前代码嵌套时有滚动的bug,被嵌套的div的滚动高度算法到这个版本时将大幅修改)

增加同时出现横向滚动条的支持(当有这方面需求时可以扩展)

期待大家帮忙寻找新bug并提出宝贵建议,相信下一版本将做的更好,谢谢(QQ:149561420,gTalk:dumachuixuf@)。

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

如果觉得《自定义滚动条3.0【javascript】》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。