事件案例

135 阅读3分钟

1、事件对象

    <script>        var div = document.querySelector("div")        div.onclick = function(e) {            // 兼容性的写法!!!            var e = e || window.event;            console.log(e)            // 鼠标的x y轴坐标            console.log(e.clientX)            console.log(e.clientY)            console.log(e.target)// target 目标        }        // 1.event对象是一个事件对象!!!        // 2.只有事件存在,才会存在的。系统传递个过来的,不是自己定义的!!        // 3. 事件对象包含了一系列相关数据的集合 (事件相关的!!!    </script>

2、

  var ul = document.querySelector("ul")        // 当点击li的时候,ul绑定的click事件会不会执行? 会执行,因为有冒泡事件!!!        ul.addEventListener("click", function(e) {            // 谁产生了事件就是谁!!!e.target 是事件源!!!            console.log(e.target)            // 谁绑定这个函数,this就是谁!!!            console.log(this) // ul            // 事件绑定的元素            console.log(e.currentTarget) // ul current 当前        })

3、冒泡事件

   1方式1 :阻止冒泡
    e.stopPropagation() // Propagation: 传播
   2.方式2
   e.cancelBubble = true; // cancel:取消 bubble:冒泡

 var grandfather = document.querySelector(".grandfather")        var father = document.querySelector(".father")        var son = document.querySelector(".son")        grandfather.addEventListener("click", function() {            console.log("grandfather捕获阶段")        }, true)        grandfather.addEventListener("click", function() {            console.log("grandfather冒泡阶段")        }, false)        father.addEventListener("click", function() {            console.log("father捕获阶段")        }, true)        father.addEventListener("click", function() {            console.log("father冒泡阶段")        }, false)        son.addEventListener("click", function() {            console.log("son捕获阶段")        }, true)        son.addEventListener("click", function(e) {            console.log("son冒泡阶段")            // 1方式1 :阻止冒泡            // e.stopPropagation()  // Propagation: 传播            // 2.方式2            e.cancelBubble = true; // cancel:取消  bubble:冒泡        }, false)

4、阻止默认事件

例如
 <!-- <a href="javascript:void(0)">点击一下</a> -->    <a href="http://www.baidu.com">点击一下</a>    <script>        var a = document.querySelector("a")        a.onclick = function(e) {            // 1.先弹出alert 2.跳转到了百度、、、 (href是一个浏览器的默认事件)            alert ("这是一个测试!!!")            // e.preventDefault(); // prevent: 阻止  default:默认            return false;        }        // 1.a  javascript:void(0)        // 2.e.preventDefault()        // 3.return false;    </script>

5、鼠标上的一些事件

     // click dblclick   double        // 给document        document.addEventListener("contextmenu", function(e) {  //网页中文字不能被选中            // alert("111")            e.preventDefault()        })        document.addEventListener("selectstart", function(e) {  //鼠标右击不会显示菜单            e.preventDefault()        })

6、鼠标跟随事件

        var img = document.querySelector("img")        document.addEventListener("mouseover", function(e) {            // clientX   可视区域的X             // pageX     文本文档中的X            // screeX    在电脑屏幕中X            // 1.获取鼠标的位置            var x = e.pageX;            var y = e.pageY;            img.style.left = x - 50 + "px"            img.style.top = y - 50 + "px"        })

7、onload 和 window.onload区别

 
onload load: 加载!!!
等待加载完毕,加载内容包括 dom元素 图片 flash css 等等!!!
 window.onload = function() {
浏览器对于html解析,是从上而下。
 当执行到这里的时候,div还没有进行渲染!!! var box = document.querySelector(".box")
 console.log(box) // null?为什么是null
 }

/和window.onload 有什么区别?

 只需加载DOM完毕之后,不需要非得加载完毕图片 flash css
document.addEventListener("DOMContentLoaded", function() {
console.log("222")
})
</script>
<div class="box"></div>

8、窗口变化事件load  resize

    <script>        window.addEventListener('load', function() {            var div = document.querySelector("div")            // resize 是监听窗口变化!!!这个监听,一旦窗口发生变化,就执行函数!!!            window.addEventListener('resize', function() {                // 窗口的宽度                console.log(window.innerWidth)                if(window.innerWidth >= 600) {                    div.style.background = "red"                }else {                    div.style.background = "blue"                }            })        })    </script>

9、倒计时

 <div>        <span class="hour"></span>        <span class="minute"></span>        <span class="second"></span>    </div>    <script>        var hour = document.querySelector(".hour")        var minute = document.querySelector(".minute")        var second = document.querySelector(".second")        function cutDown() {            var nowTime = +new Date();            var endTime = +new Date("2020-3-24 16:00:00")            var offsetTime = (endTime - nowTime)/1000;            var h = parseInt(offsetTime / 60 / 60 % 24);            var m = parseInt(offsetTime / 60 % 60)            var s = parseInt(offsetTime % 60);            h = h < 10 ? '0' + h : h;            m = m < 10 ? '0' + m : m;            s = s < 10 ? '0' + s : s;            // 需要把值放入dom元素中去            hour.innerText = h;            minute.innerText = m;            second.innerText = s;        }        // 每隔1000ms就会执行cutDown函数!!!        var timer = setInterval(cutDown, 1000)        // clearInterval(timer) 清除定时器    </script>

10、短信验证码

    手机号: <input type="number"> <button>发送验证码</button>    <script>        //         var btn = document.querySelector("button")        var time = 5;        var timer = null;        btn.addEventListener("click", function() {            timer = setInterval(function() {                if(time == 0) {                    clearInterval(timer);                    btn.innerText = "重新发送验证码"                    btn.disabled = false                    time = 5;                }else {                    btn.disabled = true                    btn.innerHTML = "(" + time + ")"                    time--;                }                            }, 1000)        })    </script>

11、location函数

 <button>点击</button>    <script>        var btn = document.querySelector("button")        btn.onclick = function() {            // 能够记录浏览器的浏览历史可以实现后退功能!!            // location.assign("http://www.baidu.com")            // 不能够记录浏览历史,也不可以回退!!!            // location.replace("http://www.baidu.com")            location.reload();        }    </script>