鼠标滚轮事件 MouseWheel
文章目录
前言
编写 jQuery SideMenu 插件的时候, 对目录过长的进行鼠标滚动操作,因为默认的 scroll 不好看,所以对滚动条进行了自定义。
先看看演示 demo
css 设置
首先将 parent 的 overflow 设置为 hidden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
.parent { position: relative; height: 100px; overflow: hidden; } .child { position: absolute; } </style> <div class="parent"> <div class="child"> <p>数据0</p> <p>数据1</p> <p>数据2</p> <p>数据3</p> <p>数据4</p> <p>数据5</p> <p>数据6</p> <p>数据7</p> <p>数据8</p> <p>数据9</p> </div> </div> |
这里我们可以通过指定 child 的 top 来显示当前的位置。
滚轮事件 MouseWheel
接下来需要对滚轮事件进行监听:
1 2 3 4 5 6 7 8 9 10 11 |
var iScroll = 0, maxHeight = $('.child').outerHeight(true) - $('.parent').outerHeight(true); $('.parent').on('mousewheel', function(e) { var oEvent = event.originalEvent, iDelta = oEvent.wheelDelta ? -oEvent.wheelDelta / 120 : oEvent.detail / 3; iScroll += iDelta * 40; iScroll = Math.min(maxHeight, Math.max(0, iScroll)); $('.child').css('top', -iScroll); }); |
这里只用到了滚轮事件重要的两个属性:wheelDelta 和 detail
除了 FireFox 之外的浏览器,每次往下滚动,wheelDelta 值都是 -120; 对于 FireFox 浏览器,每次往下滚动,detail 值都是 3,所以我们通过:
1
|
oEvent.wheelDelta ? -oEvent.wheelDelta / 120 : oEvent.detail / 3 |
判断向下滚动了多少次,而每次滚动:
1
|
iScroll += iDelta * 40; |
再设置 child 的 top 属性就可以了
文章作者 wenzhixin
上次更新 2013-12-03