zoukankan      html  css  js  c++  java
  • jQuery scrollLeft()与scrollTop() 源码解读

    这里的实现也很容易懂,通过jQuery的静态方法each给jQuery的原型添加scrollLeft和scrollTop方法。

    这里在取值时它把window和普通的element做了区分

    如果是window,就使用window.pageXOffset window.pageYOffset获取

    如果是element,就通过element.scrollLeft element.scrollTop获取。

    关于pageXOffset,MDN中介绍:

    var x = (window.pageXOffset !== undefined)
      ? window.pageXOffset
      : (document.documentElement || document.body.parentNode || document.body).scrollLeft;
    
    var y = (window.pageYOffset !== undefined)
      ? window.pageYOffset
      : (document.documentElement || document.body.parentNode || document.body).scrollTop;
    jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
        var top = "pageYOffset" === prop;
    
        jQuery.fn[ method ] = function( val ) {
            //调用access全局方法
            //access内部会调用method(elem[0],val)
            return access( this, function( elem, method, val ) {
                var win = getWindow( elem );//是不是window
                if ( val === undefined ) {//如果val为undefined
                    //如果win存在,返回window[prop] prop是对象的键值
                    //如果不存在,返回elem[method] method是对象的键名
                    return win ? win[ prop ] : elem[ method ];//window.pageXOffset 或者 elem.scrollLeft
                }
                //下面是设置值
                if ( win ) {//$(window) $(document)
                    win.scrollTo(
                        !top ? val : window.pageXOffset,
                        top ? val : window.pageYOffset
                    );
    
                } else {
                    elem[ method ] = val;
                }
            }, method, val, arguments.length, null );
        };
    });
  • 相关阅读:
    Java中顺序、并行与并发
    Java设计模式之Iterator
    渗透基础流程思路丶技巧丶与总结
    阿里巴巴Java开发手册之并发处理注意事项
    Java中Thread方法启动线程
    IOCP之客户端及消息传递
    IOCP简单实现
    JAVA 递归线程池测试 ExecutorService / ForkJoinPool
    TCP与UDP的一些心得
    七.badboy检查点和参数化
  • 原文地址:https://www.cnblogs.com/qianlegeqian/p/4463691.html
Copyright © 2011-2022 走看看