zoukankan      html  css  js  c++  java
  • mousewheel

    感谢院长提供

      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <title></title>
      5 
      6 <style type="text/css">
      7 
      8 div {
      9     border: 1px solid #000;
     10     overflow: auto;
     11     height: 260px;
     12     width: 300px;
     13 }
     14 
     15 #tester2{
     16     width: 200px;
     17     height: 160px;
     18 }
     19 
     20 </style>
     21 </head>
     22 <body>
     23 No BOM UTF-8 File!
     24 <div id="tester">
     25 prevent<br />
     26 wheel<br />
     27 bubble<br />
     28 
     29 <div id="tester2">
     30 Chrome OK<br />
     31 Opera OK<br />
     32 Firefox OK<br />
     33 aaaa<br />
     34 aaaa<br />
     35 aaaa<br />
     36 aaaa<br />
     37 aaaa<br />
     38 aaaa<br />
     39 aaaa<br />
     40 aaaa<br />
     41 aaaa<br />
     42 aaaa<br />
     43 aaaa<br />
     44 aaaa<br />
     45 aaaa<br />
     46 </div>
     47 
     48 aaaa<br />
     49 aaaa<br />
     50 aaaa<br />
     51 aaaa<br />
     52 aaaa<br />
     53 aaaa<br />
     54 aaaa<br />
     55 aaaa<br />
     56 aaaa<br />
     57 aaaa<br />
     58 aaaa<br />
     59 aaaa<br />
     60 aaaa<br />
     61 </div>
     62 
     63 <script type="text/javascript">
     64 //通用事件增加函数
     65 var addEvent = window.addEventListener ? function(el, name, callback, useCapture){
     66     el.addEventListener(name, callback, !!useCapture);
     67     return callback;
     68 } : window.attachEvent ? function(el, name, callback){
     69     var f = function(e){
     70         e = e || window.event;
     71         callback.call(el, e || window.event);
     72     }
     73     el.attachEvent('on' + name, f);
     74     return f;
     75 } : function(el, name, callback){
     76     el['on' + name] = callback;
     77     return callback;
     78 }
     79 
     80 //取值鼠标滚动时,是使用wheelDelta还是使用detail。
     81 //在webkit和opera中,滚动事件对象都具有这两个属性
     82 //opera中,wheelDelta与detail的关系为:wheelDelta = -40 * detail
     83 //但是在webkit中,detail始终为0,wheelDelta始终120。
     84 //不过此例对最终值不关心,只在值的正负。
     85 //最终定为向下为正,对wheelDeta需修正。
     86 //由于属性的混乱,所以最后只能根据浏览器判定取哪个属性。
     87 //所以采用ua判断浏览器,标记useWheelDelta,最后判断值的取向。
     88 var useWheelDelta = false;
     89 var wheelEventName = 'mousewheel';
     90 navigator.userAgent.replace(/webkit|presto|firefox/i, function(m){
     91     m = m.toLowerCase();
     92     if(m === 'webkit'){
     93         useWheelDelta = true;
     94     } else if(m === 'firefox'){
     95         wheelEventName = 'DOMMouseScroll';
     96     }
     97 })
     98 
     99 var el = document.getElementById('tester');
    100 var el2 = document.getElementById('tester2');
    101 
    102 var
    103   el2_preventDefault_down = false    //是否阻止向下滚动的标记
    104 , el2_preventDefault_up = true    //是否阻止向上滚动的标记
    105 , el2_areaY = el2.scrollHeight - el2.offsetHeight    //可滚动区域大小,用于判断向下滚动是否到头
    106 ;
    107 
    108 addEvent(el2, wheelEventName, function(e){
    109     //修正滚动值
    110     //正值下 负值上
    111     var detail = useWheelDelta ? e.wheelDelta * -1 : e.detail;
    112     e.stopPropagation();
    113 
    114     if(
    115         (detail > 0 && el2_preventDefault_down)    //向下滚动 并且 滚动到头了
    116         ||    //或者
    117         (detail < 0 && el2_preventDefault_up)    //向上滚动 并且 滚动到头了
    118         ){
    119 
    120         console.log('to ' + (detail < 0 ? 'up' : 'down') + ' end');
    121 
    122         e.preventDefault();
    123     }
    124 
    125 });
    126 //scroll在wheel事件触发时还没有发生,
    127 //所以需要增加scroll判断某个方向上的滚动结果。
    128 //当滚动位置有剩余时,即便单次滚动的单位量大于剩余量
    129 //多余的量也不会溢出到父元素。万幸。
    130 addEvent(el2, 'scroll', function(e){
    131     e.stopPropagation();
    132     el2_preventDefault_up = el2.scrollTop <= 0;    //向上滚动到头了
    133     el2_preventDefault_down = el2_areaY - el2.scrollTop <= 0;    //向下滚动到头了
    134 });
    135 
    136 </script>
    137 
    138 </body>
    139 </html>
  • 相关阅读:
    使用 requests 维持会话
    使用 requests 发送 POST 请求
    使用 requests 发送 GET 请求
    requests 安装
    使用 urllib 分析 Robots 协议
    使用 urllib 解析 URL 链接
    使用 urllib 处理 HTTP 异常
    使用 urllib 处理 Cookies 信息
    使用 urllib 设置代理服务
    按单生产程序发布
  • 原文地址:https://www.cnblogs.com/qzsonline/p/2908868.html
Copyright © 2011-2022 走看看