css基础--位移和定位2(鼠标位置,滚动条位置)

 获取鼠标指针的页面位置  e.pageX||e.clientX

获取鼠标指针在元素内的位置  e.offsetX||e.layerX

获取滚动条的位置  self.pageXOffset||(document.documentElement&&document.documentElement.scrollLeft)||document.body.scrollLeft

设置滚动条的位置   window.scrollTo(x,y)

<body style="width:200px;height: 200px;">
        <textarea id="t" rows="15" cols="4" style="position: fixed;    left:50px;top:50px;"></textarea>
        
        <script type="text/javascript">
            //1.获取鼠标指针的页面位置
            function getMP(e){//e表示当前事件对象,由系统自动捕获
                var e=e||window.event;
                return {//e.pageX兼容Safari     e.clientX兼容IE(标准和怪异)
                    x:e.pageX||e.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft),
                    y:e.pageY||e.clientY+(document.documentElement.scrollTop||document.body.scrollTop)
                }
            }
            
            var t=document.getElementById("t");
            document.οnmοusemοve=function(e){
                var m=getMP(e);
                t.value="mouseX="+m.x+"\n"+"mouseY="+m.y
            }
            //2.获取鼠标指针在元素内的位置
            function  getME(e,o){//e表示当前事件对象,由系统自动捕获  o表示当前元素
                var  e = e||window.event;
                return {
                    x:e.offsetX||(e.layerX-o.offsetLeft),
                    y:e.offsetY||(e.layerY-o.offsetTop)
                }
            }
 兼容Mozilla浏览器,通过鼠标偏移坐标减去元素的偏移坐标,得到元素内鼠标偏移坐标的参考原点元素边框 外壁的左上角

兼容Safari浏览器的offsetX,offsetY是以元素边框 外壁的左上角为坐标原点,而其他浏览器则以元素边框 内壁的左上角为坐标原点,这导致不同浏览器的解析差异
            //2.2完善获取鼠标指针在元素内的位置
            function  getStyle(e,n){//e表示元素,n表示属性名,如“width”、“borderColor”
                if(e.style[n]){//若果在style中显示定义
                    return e.style[n];
                    }else if(e.currentStyle){//否则,在IE
                        return e.currentStyle[n]
                    }else if(document.defaultView&&document.defaultView.getComputedStyle){//非ie(DOM标准)
                        n=n.replace(/([A-Z])/g,"-$1");//转换参数的属性名  borderColor--> border-Color
                        n=n.toLocaleLowerCase();//border-Color-->border-color
                        var s= document.defaultView.getComputedStyle(e,null);
                        if(s){
                            return s.getPropertyValue(n)
                        }
                    }else{
                        return null;//如果不支持,返回null
                    }
            }
        
            function getME(e,o){//e表示当前事件对象,o表示当前元素
                var e=e||window.event;
                //获取元素左侧边框的宽度,边框默认时为3px
                var bl=parseInt(getStyle(o,"borderLeftWidth"))||((o.style.borderLeftStyle&&o.borderLeftStyle!="none")?3:0)
                //获取元素顶部边框的宽度,
                var bt=parseInt(getStyle(o,"borderTopWidth"))||((o.style.borderTopStyle&&o.borderTopStyle!="none")?3:0)
               //e.offsetX为一般浏览器,e.layerX为早期的Mozilla浏览器

               var x=e.offsetX||(e.layerX-o.offsetLeft-bl);//兼容Mozilla类型浏览器,减去边框宽度
                var y=e.offsetY||(e.layerY-o.offsetTop-bt);
                var u=navigator.userAgent;//获取浏览器的用户数据
                if((u.indexOf("KHTML")>-1)||(u.indexOf("Konqueror")>-1)||(u.indexOf("AppleWebKit")>-1)){
                    x-=bl;//如果是Safari浏览器,则减去边框的影响
                    y-=bt;
                }
                return {//返回兼容不同浏览器的鼠标位置对象,以元素边框内壁左上角为定位原点
                    x:x,
                    y:y
                }
            }
        
        //3.获取页面滚动条的位置
        function getPS(){
            var h=document.documentElement;
            var x=self.pageXOffset||(h&&h.scrollLeft)||document.body.scrollLeft;
            var y=self.pageYOffset||(h&&h.scrollTop)||document.body.scrollTop;
            return {
                y:y,
                x:x
            };
        }
        //3.2设置滚动条的位置window.scrollTo(x,y)
        function getPoint(ele){//获取指定元素距离左上角偏移坐标
                var x=y=0;//初始化临时变量
                while(ele.offsetParent){
                    x+=ele.offsetLeft;//累计总的x轴偏移距离
                    y+=ele.offsetTop;//累计总的y轴偏移距离
                    ele=ele.offsetParent;//把当前元素的offsetParent属性值传递给循环条件表达式
                }
                return {//遍历到body元素后,没有offsetParent属性,循环停止,把叠加的值赋值给对象直接量,并返回该对象
                    "x":x,
                    "y":y
                }
            }
        function setPS(ele){
            window.scrollTo(getPoint(ele).x,getPoint(ele).y);
        }
        </script>
    </body>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值