码迷,mamicode.com
首页 > 其他好文 > 详细

监控滚轮滚动方向

时间:2014-09-02 15:46:44      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   art   div   cti   代码   

目标:屏幕向上滚动、向下滚动后,UI做对应的响应

初期实现:

 1     var scrollFunc=function(e){
 2        3       var data=0;
 4       e = e || window.event;
 5       if(e.wheelDelta){//IE/Opera/Chrome
 6         data = e.wheelDelta;
 7       }else if(e.detail){//Firefox
 8         data = e.detail;
 9       }
10       cb && cb(data);
11     }
12     /*注册事件*/
13     if (document.addEventListener) {
14       document.addEventListener(‘DOMMouseScroll‘,scrollFunc,false);
15     }
16     window.onmousewheel = document.onmousewheel = scrollFunc;//IE/Opera/Chrome/Safari

在PC端浏览器是可以获得滚动的方向了。

但是有一个Bug:进入Page,第一个滚动操作就是向下滚时,是无法触发的事件。

但这仅仅是在PC端,手机端则需要另辟蹊径:

 1     var sX = sY = eX = eY = 0;
 2     function touchFun(event){
 3       event = event || window.event;
 4       event.preventDefault();
 5       var _data = _getTouchPointer(event);
 6       
 7       switch (event.type) {
 8         case ‘touchstart‘:
 9           sX = _data.x;
10           sY = _data.y;
11           break;
12         case ‘touchmove‘:
13           eX = _data.x;
14           eY = _data.y;
15           //alert(‘:‘+ eX +‘eY:‘+ eY);
16           break;
17         case ‘touchend‘:
18           var a = sX - eX,
19               b = sY - eY,
20               data = {‘scrollX‘:a, ‘scrollY‘:b};
21           if (b > 0 && Math.abs(b) > Math.abs(a)) {
22             data.point = ‘up‘;
23           } else if (b < 0 && Math.abs(b) > Math.abs(a)){
24             data.point = ‘down‘;
25           } else if (a < 0 && Math.abs(a) > Math.abs(b)){
26             data.point = ‘right‘;
27           } else if (a > 0 && Math.abs(a) > Math.abs(b)){
28             data.point = ‘left‘;
29           }
30           cb && cb(data);
31           break;
32       }
33     }
34 
35     /* 获得坐标 */
36     function _getTouchPointer(event){
37       var touchX = 0,
38           touchY = 0;
39       // 如果这个元素的位置内只有一个手指的话
40       if (event.targetTouches.length == 1) {
41         var touch = event.targetTouches[0];
42         touchX = touch.pageX;
43         touchY = touch.pageY;
44       }
45       return {‘x‘ : touchX, ‘y‘ : touchY };
46     }
47     
48     el.addEventListener(‘touchstart‘, touchFun, false);
49     el.addEventListener(‘touchmove‘, touchFun, false);
50     el.addEventListener(‘touchend‘, touchFun, false);

 

代码比较糙,不优雅,求喷。

 

监控滚轮滚动方向

标签:style   blog   color   io   ar   art   div   cti   代码   

原文地址:http://www.cnblogs.com/xiaocai38/p/3951499.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!