• javascript事件操作


    这里使用一个图片切换的方法来举例说明,如何通过代码操作事件。

    1 通过html属性处理事件

    <img id='avatar1' src="http://7u2gej.com1.z0.glb.clouddn.com/123.png" onmouseover="changeImg(this,event)" onmouseleave="changeImg(this,event)" width="100px" height="100px">
     
    <script>
    var myImage = [
        "http://7u2gej.com1.z0.glb.clouddn.com/123.png",
        "http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
    ]
     
    function changeImg(that, e) {
        if (e.type == "mouseleave") {
            that.src = myImage[0]
        } else {
            that.src = myImage[1]
        }
    }
    </script>
    

    使用Event对象的target属性代替this

    <img id='avatar1' src="http://7u2gej.com1.z0.glb.clouddn.com/123.png" onmouseover="changeImg(event)"
         onmouseleave="changeImg(event)" width="100px" height="100px">
     
    <script>
        var myImage = [
            "http://7u2gej.com1.z0.glb.clouddn.com/123.png",
            "http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
        ]
        function changeImg(e) {
            var el = e.target
     
            if (e.type == "mouseleave") {
                el.src = myImage[0]
            } else {
                el.src = myImage[1]
            }
        }
    </script>
    

    缺点:

    • html与js混很容易混在一起,比较难维护修改
    • 不修改html就不能修改事件处理程序
    • 只能为html代码中出现的元素简历事件处理程序,不能动态创建元素

    2 通过对象属性处理事件

    对象属性处理事件,可以很好的弥补上面两种方法的缺点。

    <img id='avatar' src="http://7u2gej.com1.z0.glb.clouddn.com/123.png" width="100px" height="100px">
     
    <script>
        var myImage = [
            "http://7u2gej.com1.z0.glb.clouddn.com/123.png",
            "http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
        ]
        function changeImg(e) {
            var el = e.target
     
            if (e.type == "mouseleave") {
                el.src = myImage[0]
            } else {
                el.src = myImage[1]
            }
        }
    
        //执行事件处理程序时,浏览器会自动给处理函数传递Event对象。
        document.getElementById("avatar").onmouseover = changeImg;
        document.getElementById("avatar").onmouseleave= changeImg;
    
    </script>
    

    3 标准事件模型

    3.1 标准方式

    通过代码连接到事件的标准方式。并且实际项目中一般都使用这种方法:

    <script>
        var myImage = [
            "http://7u2gej.com1.z0.glb.clouddn.com/123.png",
            "http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
        ]
        var img = document.getElementById("avatar")
     
        function chgImgMouseover(e) {
            var el = e.target
            el.src = myImage[1]
        }
     
        function chgImgMouseleave(e) {
            var el = e.target
            el.src = myImage[0]
        }
     
        //不直接使用每个元素的onmouseover/onmouseleave对象,而是通过addEventListener()注册mouseover/mouseleave事件处理程序
        //添加一个事件监听器用来监听mouseover事件
        img.addEventListener("mouseover", chgImgMouseover)
        img.addEventListener("mouseleave", chgImgMouseleave)
     
    </script>
    
    img.removeEventListener("mouseover",chgImgMouseover)      //删除监听mouseover事件的监听器
    img.removeEventListener("mouseleave", chgImgMouseleave)
    

    标准事件模型的优点是,可以为一个元素的一个事件注册多个事件监听器,在需要用不同、不相关的函数监听元素上同一个事件时,比较有用。
    针对同一个所监听的事件也可以调用多个函数,如下:

    //这些函数是按顺序执行的
    img.addEventListener("click", funOne)
    img.addEventListener("click", funTwo)
    img.addEventListener("click", funThree)
    img.addEventListener("click", funFour)
    

    3.2 使用匿名函数

    <script>
        var myImage = [
            "http://7u2gej.com1.z0.glb.clouddn.com/123.png",
            "http://7u2gej.com1.z0.glb.clouddn.com/blog%28hui2%29.png"
        ]
        var img = document.getElementById("avatar")
     
     
        img.addEventListener("click", function (e) {
            var el = e.target
            el.src = myImage[1]
            e.preventDefault()   //取消事件的默认动作
        })
     
    </script>
    
    
  • 相关阅读:
    Windows下python3安装pip管理包(转贴)
    AnyConnect removes "Connections" tab from IE Settings solution
    split陷阱
    java不足前面补0
    linux定时任务cron配置说明
    maven常用的plugin
    linux部署两个tomcat
    spring定时任务配置,以及不执行的解决办法
    windows10 自带笔记本键盘禁止和开启
    spring task的定时任务突然断了
  • 原文地址:https://www.cnblogs.com/whatisfantasy/p/6238631.html
Copyright © 2020-2023  润新知