js制作css滚动条,自定义滚动条:html、css、js代码的分别实现步骤

HTML结构

js对于鼠标滚轮事件的监听

2017年08月25日 18:17:56

阅读数:10072

需求:

通过鼠标滚轮实现某个表单内的数字增加减少操作,或者滚轮控制某个按钮的上下滚动后触发不同的事件。

实现:

通过js对鼠标滚轮的事件进行监听。

描述:

首先,不同的浏览器有不同的滚轮事件。主要是有两种,onmousewheel(firefox不支持)和DOMMouseScroll(只有firefox支持),关于这两个事件这里不做详述,想要了解的朋友请移步:鼠标滚轮(mousewheel)和DOMMouseScroll事件。

具体实现:1. 需要添加事件监听,代码如下:兼容firefox采用addEventListener监听

/*监听鼠标滚动事件

* 1.火狐的是:DOMMouseScroll;

* 2.IE/Opera/Chrome:直接添加事件*/

if(document.addEventListener){

document.addEventListener('DOMMouseScroll',scrollFunc,false);

}//W3C

window.onmousewheel=document.onmousewheel=scrollFunc;//IE/Opera/Chrome

var scrollFunc=function(e){

e=e || window.event;

if(e.wheelDelta){//IE/Opera/Chrome

//自定义事件:编写具体的实现逻辑

mouseScroll();

}else if(e.detail){//Firefox

//自定义事件:编写具体的实现逻辑

mouseScroll();

}

}

简要说明:

判断滚轮向上或向下在浏览器中也要考虑兼容性,现在五大浏览器(IE、Opera、Safari、Firefox、Chrome)中Firefox 使用detail,其余四类使用wheelDelta;两者只在取值上不一致,代表含义一致,detail与wheelDelta只各取两个 值,detail只取±3,wheelDelta只取±150,其中正数表示为向下,负数表示向上

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_35647781/article/details/77584977

css结构.content{

width: 500px;

height: 400px;

border:1px solid;

overflow: hidden;

padding:40px;

margin:50px auto;

position: relative;

}

.scroll-wrap{

position: absolute;

width: 10px;

height: 100%;

background: #d8d4d4;

top:0;

right:0;

}

.scroll-wrap span{

display: block;

width: 5px;

height: 100px;

background: red;

border-radius: 10px;

margin:0 auto;

position: relative;

}

js代码

var wrapScroll=document.getElementById("wrapScroll")

var tapScroll=wrapScroll.getElementsByTagName("span")[0];

var contentIn=document.getElementById("countent");

var content=document.getElementById("content")

tapScroll.οnmοusedοwn=function(){

var e=e||window.event;

var dowY=e.pageY-this.offsetTop;

document.οnmοusemοve=function(e){

var ev=e||window.event;

var movY=ev.pageY-dowY;

conmon(movY)

}

document.οnmοuseup=function(){

document.οnmοusemοve=null;

}

}

content.onmousewheel=function(event){

var stemp=tapScroll.offsetTop-content.offsetTop+50;

conmon(stemp)

}

function conmon(num){

var dela=wheel(event)

num=num<0?0:num;

var c=wrapScroll.offsetHeight-tapScroll.offsetHeight

dela>0?num-=10:num+=10;

num=num>c?c:num

tapScroll.style.top=num+"px";

var speed=(contentIn.offsetHeight-content.offsetHeight)/c+0.2;

console.log(speed)

contentIn.style.marginTop=-(speed*num)+"px"

}

//滚轮事件封装

function wheel(event){

var e=event||window.event;

var delta=0;//次数

if(e.wheelDelta){

delta=e.wheelDelta/120;

}else if(e.detail){

delta=e.detail/3;

}

if(e.preventDefault){

e.preventDefault()

}

return delta

}

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值