zoukankan      html  css  js  c++  java
  • dom2

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
    #div1{
    200px;
    height: 200px;
    background-color: yellow;
    }
    #div2{
    100px;
    height: 100px;
    background-color: blue;
    }
    #div3{
    50px;
    height: 50px;
    background-color: red;
    }
    </style>
    <script type="text/javascript">
    /* [JS中的事件分类]
    * 1、鼠标事件:
    * click/dbclick/mouseover/mouseout/mousemove/mousedown/mouseup
    *
    * 2、键盘事件:
    * keydown: 键盘按下去触发
    * keypress: 键盘按下并松开的瞬间触发
    * keyup: 键盘抬起时触发
    *
    * [注意事项:(了解)]
    * ① 执行顺序: keydown——keypress——keyup
    * ② 长按时,会循环不断的执行keydown-keypress
    * ③ 有keydown事件,不一定有keyup事件(事件触发过程中,鼠标移走,可能就没有keyup)
    * ④ keypress只能捕获字母、数字、符号键,不能捕获功能键;keydown/keyup基本可以捕获所有功能键(特殊除外)
    * ⑤ keypress区分大小写,keydown和keyup不区分;
    * ⑥ keydown/keyup区分主键盘和小键盘,keypres不区分;
    *
    * [确定键盘触发按键]
    * ① 在触发函数中,传入参数e,代表按键时间;
    * ② 通过e.keyCode ,确认按键Ascii码值,进而确定按键;
    * ③ 所有浏览器系统的写法(一般不必要):
    * var evn = e||event; //取到键盘事件
    * var code = evn.keyCode||evn.which||evn.charCode;//取到按键编码
    */
    var isAlt = 0;
    var isEnt = 0;
    document.onkeydown = function(e){
    var evn = e||event;
    var code = evn.keyCode||evn.which||evn.charCode;

    if(code==13){
    isEnt = 1;
    // alert("你按了回车");
    }
    if(code==18){
    isAlt = 1;
    }
    // 判读Alt+Enter组合键
    if(isAlt==1&&isEnt==1){
    console.log("Alt+Enter");
    }else if(isAlt==1&&isEnt==0){
    console.log("Alt");
    }else if(isAlt==0&&isEnt==1){
    console.log("Enter");
    }
    }
    document.onkeypress = function(e){
    console.log(e);
    }
    document.onkeyup = function(e){
    console.log(e);
    if(e.keyCode==13){
    isEnt = 0;
    }

    if(e.keyCode==18){
    isAlt = 0;
    }
    }


    /* 【JS中的DOM0事件模型】
    *
    * 1、内联模型:直接将函数名作为HTML标签的某个事件属性的属性值;
    * eg: <button onclick="func()">按钮</button>
    * 缺点:违反W3C关于Html与JavaScript分离的基本原则;
    *
    * 2、脚本模型:在JS脚本中通过事件属性进行绑定;
    * eg: window.onload = function(){}
    * 局限性:同一节点,只能绑定一个同类型事件;
    *
    *
    * 【JS中的DOM2事件模型】
    * 1、添加事件绑定:
    * IE10之前:btn1.attachEvent("onclick",函数);
    * 其他浏览器:btn1.addEventListener("click",函数,true/false);
    * 参数三:false(默认),表示事件冒泡,true,表示事件捕获
    * 兼容写法:if(btn1.attachEvent){
    * btn1.attachEvent();
    * }else{
    * btn1.addEventListener();
    * }
    *
    * 优点:同一节点,可以添加多个同类型事件的监听器;
    *
    * 2、取消事件绑定:
    * 注:如果要取消事件绑定,那么在绑定事件时,回调函数必须使用有名函数,而不能使用匿名函数。因为在取消事件绑定时,需要传入函数名;
    * .removeEventListener("click",函数名);
    * .detachEvent("onclick",函数名);
    *
    */
    window.onload = function(){
    var btn1 = document.getElementById("btn1");

    function func1(){
    alert("1");
    }

    btn1.addEventListener("click",func1,false);

    btn1.addEventListener("click",function(){
    alert(2);
    },false);

    var btn2 = document.getElementById("btn2");
    btn2.addEventListener("click",function(){
    btn1.removeEventListener("click",func1);
    },false);
    }


    </script>

    </head>


    <body>
    <button id="btn1">点击我弹个窗</button>

    <button id="btn2">点击我就是不让他弹</button>


    <div id="div1">
    <div id="div2">
    <div id="div3">
    div3
    </div>
    div2
    </div>
    div1
    </div>

    <a href="../../1_HTML基本标签/01_HTML结构之Head.html" onclick="eventHandler()">点击跳转页面</a>

    </body>

    <script type="text/javascript">
    /* [JS中的事件流]
    *
    * 1、事件冒泡:当某DOM元素触发某事件时,会从当前DOM元素开始,逐个触发其祖先元素的同类型事件,直到DOM根节点;
    * DOM0模型,均为事件冒泡;
    * IE中使用.attachEvent()添加的事件,均为冒泡;
    * 其他浏览器,.addEventListener添加的事件,当第三个参数为false时,为冒泡;
    *
    * 2、事件捕获:当某DOM元素触发某事件时,会从DOM根节点开始,逐个触发其祖先元素的同类型事件,直到触发到当前元素为止;
    * 只有使用.addEventListener添加事件,并设置第三个参数为true时,才进行捕获;
    *
    * ↓ 当前元素 ↑
    * ↓ ↑
    * 冒 父元素 捕
    * ↓ ↑
    * 泡 爷爷元素 获
    * ↓ ↑
    * DOM根节点
    *
    * 3、阻断事件冒泡:
    * IE浏览器中:将e.cancelBubble属性设为true;
    * 其他浏览器:调用e.stopPropagation();方法
    * 兼容写法:function myParagraphEventHandler(e) {
    * e = e || window.event;
    * if (e.stopPropagation) {
    * e.stopPropagation(); //IE以外
    * } else {
    * e.cancelBubble = true; //IE
    * }
    * }
    *
    * 3、阻止默认事件:
    * IE浏览器中:将e.returnValue属性设为false;
    * 其他浏览器:调用e.preventDefault();方法
    * 兼容写法:function eventHandler(e) {
    * e = e || window.event;
    * // 防止默认行为
    * if (e.preventDefault) {
    * e.preventDefault(); //IE以外
    * } else {
    * e.returnValue = false; //IE
    * }
    * }
    *
    */
    var div1 = document.getElementById("div1");
    var div2 = document.getElementById("div2");
    var div3 = document.getElementById("div3");

    function myParagraphEventHandler(e) {
    e = e || window.event;
    if (e.stopPropagation) {
    e.stopPropagation(); //IE以外
    } else {
    e.cancelBubble = true; //IE
    }
    }

    function eventHandler(e) {
    e = e || window.event;
    // 防止默认行为
    if (e.preventDefault) {
    e.preventDefault(); //IE以外
    } else {
    e.returnValue = false; //IE
    }
    alert("哈哈哈哈哈跳不了!气死你!");
    }



    div1.addEventListener("click",function(e){
    myParagraphEventHandler();
    console.log("div1触发了click事件");
    },true);

    div2.addEventListener("click",function(e){
    myParagraphEventHandler();
    console.log("div2触发了click事件");
    },true);

    div3.addEventListener("click",function(e){
    myParagraphEventHandler();
    console.log("div3触发了click事件");
    },true);

    /*div1.onclick = function(){
    console.log("div1触发了click事件");
    }
    div2.onclick = function(){
    console.log("div2触发了click事件");
    }
    div3.onclick = function(){
    console.log("div3触发了click事件");
    }*/
    </script>
    </html>

  • 相关阅读:
    性能测试二十四:环境部署之Redis多实例部署
    性能测试二十三:环境部署之Redis安装和配置
    性能测试二十二:环境部署之Nginx
    性能测试二十一:环境部署之mysql
    性能测试二十:环境部署之Tomcat多实例部署+日志监控
    性能测试十九:jmeter参数优化+排错
    Zookeeper学习
    Zookeeper学习
    Zookeeper学习
    Hadoop Balancer源码解读
  • 原文地址:https://www.cnblogs.com/zhangxiaona/p/6719681.html
Copyright © 2011-2022 走看看