美文网首页基础前端
event 参数属性

event 参数属性

作者: CondorHero | 来源:发表于2019-04-02 00:03 被阅读9次

    一、event 是什么?

    浏览器在调用事件处理函数的时候,会传进去一个实际参数,这个参数是一个对象,表示这次点击事件的所有细节。比如按的什么按钮、点击的位置等等。
    所以,我们的事件处理函数,就要通过一个形式参数来接收。
    oDiv.onclick = function(event){}
    比如,获得鼠标当前的位置:

        document.onmousemove = function(event){
          event = event || window.event;//兼容性代码
          h1.innerHTML = "当前鼠标坐标为" + event.clientX + "," + event.clientY;
         }
    

    event.clientX表示触发事件的时候,鼠标的 x 位置(相对于视口浏览器)

    二、鼠标位置

        event.clientX
        event.clientY
        event.screenX
        event.screenY
        event.offsetX
        event.offsetY
        event.pageX
        event.pageY
    

    这六个值都没有单位。
    clientX表示鼠标距离视口左边x值
    screenX表示鼠标距离整个屏幕左边x值
    offsetX 鼠标距离触发事件的x距离
    pageX 页面有滚动条鼠标距离左边距的距离

    我们现在说的,是oDiv这个元素在页面中的净位置,自己起一个名字allTop。
    得到allTop不难,迭代,一层一层的累加offsetTop值。

    思考?在之前写的鼠标拖拽事件会发现,我们使用 offsetTop 来修复进入事件时候,盒子乱蹦。因为 oDiv.offsetTop 指的是这个盒子的 border 外层到自己的 offsetParent 的 border 内侧。如果是盒子套盒子,有定位的话没事,但是如果操作的盒子只有一个并且 body 过大,出现了滚动条,一旦滚动就会出现 offsetTop的问题!

    三、输出页面滚动值 scroll

    scroll
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>滚动</title>
        <style>
            body {
                height: 5555px;
            }
            .box1 {
                height: 500px;
                width: 300px;
                background-color: #f3c51d;
                padding-top: 300px;
            }
            .box2 {
                height: 200px;
                width: 200px;
                background-color: #5f55ff;
                padding: 20px;
            }
            .box3 {
                height: 150px;
                width: 150px;
                background-color: #26f378;
    
            }
        </style>
    </head>
    <body>
        <div class="box1">
            <div class="box2">
                <div class="box3">
                    <h6></h6>
                </div>
            </div>
        </div>
        <script>
            var h1 = document.getElementsByTagName("h6")[0];
            //当窗口卷动的时候发生这个事件
            window.onscroll = function(){
                //document.documentElement就是<html>标签
                h1.innerHTML = document.body.scrollTop || document.documentElement.scrollTop;
            }
    
        </script>
    </body>
    </html>
    

    四、得到一个盒子净 top (盒子到浏览器位置的top)

    这时如果盒子发生嵌套,没有定位的时候(也就是只有一个offsetparent)使用 offsetTop 会得到到浏览器的位置。就不用封装函数了,但是万一中间有盒子有定位,就得不到到浏览器盒子的净 top 值了,这招就行不通了。只能通过计算这个盒子元素所 offsetParent 的 offsetTop 值的和。但是这个方法还得注意所有的 offsetparent 盒子没有 border。

    <body>
        <div class="box1" id="box1">
            <div class="box2" id="box2">
                <div class="box3" id="box3">
                    <h6></h6>
                </div>
            </div>
        </div>
        <script>
            var box1 = document.getElementById("box1");
            var box2 = document.getElementById("box2");
            var box3 = document.getElementById("box3");
            
            //console.log(box3.offsetTop);  未定位之前354px
            //返回这个元素在页面中的净位置
            //就是这个元素所有offsetParent的offsetTop值的和
            function getAllTop(obj){
                //累加器,累加器的初始值不是0,而是自己现在offsetTop值
                //一会儿while语句直接从它爸开始了
                var allTop = obj.offsetTop;
                //当前正在算高度的元素
                var currentObj = obj;
                while(currentObj = currentObj.offsetParent){
                    allTop += currentObj.offsetTop;
                }
                return allTop;
            }
            // function getAlltop(obj){
    
            //  // var gettop = 0;
            //  // while(obj.offsetParent){
            //  //  gettop+=obj.offsetTop;
            //  //  obj = obj.offsetParent;
            //  // }
            //  // return gettop;
            // }
        </script>
    </body>
    </html>
    

    五、得到一个盒子内部的坐标 使用 offsetX 和 offsetY

    offsetX 和 offsetY 是鼠标距离触发事件的X距离和Y距离!


    offsetX 和 offsetY.gif
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>滚动</title>
        <style>
            body {
                height: 5555px;
            }
            div {
                height: 300px;
                width: 300px;
                background-color: #f3c51d;
                margin: 100px 100px;
            }
        }
        </style>
    </head>
    <body>
        <div id="box"></div>
    
        <script>
            var box = document.getElementById("box");
    
            box.onmousemove = function(event){
                console.log(event);
                var x = event.offsetX;
                var y = event.offsetY;
                box.innerHTML = x + " " + y;
    
            }
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

        本文标题:event 参数属性

        本文链接:https://www.haomeiwen.com/subject/etmpbqtx.html