zoukankan      html  css  js  c++  java
  • 007 Javascript(080

    [A] 认识事件

                    事件基础:Javascript事件是由访问web页面的用户引起的一系列操作;

                              当用户执行某些操作的时候,再去执行一些列代码;

                              或者获取事件的详细信息,如鼠标位置,键盘按键等。

                    1. javascript可以处理的事件类型为:

                              A.鼠标事件

                                    click:          单击鼠标的键钮。

                                    dblclick:      双击鼠标的键钮。

                                    mouseover:     鼠标移入。

                                    mouseout:      鼠标移出。

                                    mousemove:     鼠标移入(不停的触发)。

                                    mousedown:     鼠标的键被按下。

                                    mouseup:       鼠标的键被释放弹起。

                                    mouseenter:     鼠标移入(冒泡,即同样会去触发子节点)。

                                    mouseleave:     鼠标移出(冒泡,即同样会去触发子节点)。                    

                              B.键盘事件(表单元素,全局window)

                                    keydown:       键盘按下(若按下不松手,则会一直触发)

                                    keyup:         键盘抬起

                                    keypress:      键盘按下(只支持字符键)

                              C.HTML事件

                                    1.window事件

                                          load        当页面加载完成以后的触发

                                          unload      当页面解构(页面刷新,关闭等使页面消失)的时候触发。

                                          scroll      当前页面发生滚动时触发

                                          resize      当前窗口发生大小变化时触发

                                    2.表单事件

                                          blur        失去焦点

                                          focus       获取焦点

                                          select      在输入框中选中文本时触发

                                          change      输入框中的文本被修改,并且失去焦点


                                          【注】必须添加在form元素上

                                          submit      当点击submit按钮时触发

                                          reset       当点击reset按钮时触发

                      2. 所有事件处理函数都会有两个部分组成,on+事件名称

                          【注】系统会在在事件绑定完成的时候,生成一个事件对象;

                                事件触发的时候,系统会自动去调用事件绑定的函数,将事件对象当作是第一个参数传入。

                // 这种通过形参拿事件事件对象的方式在IE8以下不兼容,IE8以下用window.event   
                 // IE8以下调用方式(固定用法)
                function show(ev){           
                        var e = arg||window.event;
                        alert(e);
                   }    

                      3. javascript事件绑定的两种模式:

                              1.内联模式 事件在行间绑定

                                  function btn(){

                                        alert("你好,很高兴见到你!!!");

                                  }

                                  <div id="div1" onclick="btn()">nihao</div>

                              2.外联模式/脚本模式(更常用)

                                    事件在window.onload = fucntion(){}函数中调用

    [B] 事件绑定方法

        事件绑定:

                      元素节点.on + 事件类型 = 匿名函数

                    【注】系统会在在事件绑定完成的时候,生成一个事件对象;

                        当事件被触发的时候,系统会自动去调用事件绑定的函数,将事件对象当作是第一个参数传入。

     [C] 鼠标事件对象属性

                鼠标事件对象属性:
                      1. buttton属性
              【取值】
                                0 左键
                                1 滚轮
                                2 右键
                
          2. 获取当前鼠标位置:(原点位置不一样)
                        clientX        clientY     原点在可视窗口的左上角
                        pageX         pageY       原点在整个页面的左上角(包含滚动之前的部分)
                        screenX      screenY     原点在电脑屏幕的左上角
                
                  3. 跟随鼠标移动提示框
                        事件类型:
                              mouseover
                                      让提示框显示
                              mouseout
                                      让提示框隐藏
                              mousemove
                                     让提示框移动
     
                  4. 事件对象的属性:
                        shiftKey           //按下shift键,为true,,默认为false。
                        altKey             //按下shift键,为true,,默认为false。
                        ctrlKey            //按下shift键,为true,,默认为false。
                        mataKey         //window系统下, 按下windows(开始)键,为true。
                                          //macos系统下,按下command键,为true。
                     【作用】:这四个键可以和其他的键组成快捷键。 

     [D] 键盘事件属性

                    1. keyCode     键码

                        which(which为其他操作系统下的键码)

                              【注】只在keydown下支持,也就是键盘按下才有效

                              【返回值】键码的返回值不区分大小写的ASCII键码值(支持功能键)

                             通用的固定调用格式    var w = e.which || e.keyCode;

                    2. charCode    字符码

                        which(which为其他操作系统下的键码)

                              【注】只在keypress下支持。

                              【返回值】键码的返回值区分大小写的ASCII键码值(不支持功能键)

                          通用的固定调用格式    var w = e.which || e.charCode;

     [E] 事件对象属性:

                   1.  target      //目标对象(或触发对象)
                        IE8以下不兼容,采用window.event.srcElement;
            如: 鼠标点击 li, 则该点击事件的 target 就是该 li。
                         【注】目标对象(或触发对象)指向的是这个事件由谁引起的。
                
     

            面向对象语言中 this 表示当前对象的一个引用。

            但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

          • 在方法中,this 表示该方法所属的对象。
          • 如果单独使用,this 表示全局对象。
          • 在函数中,this 表示全局对象。
          • 在函数中,在严格模式下,this 是未定义的(undefined)。
          • 在事件中,this 表示接收事件的元素。
          • 类似 call() 和 apply() 方法可以将 this 引用到任何对象。
                        this 每个函数都会有一个this,它永远指向当前函数的主人。
                      【区别】target一旦确定就不会变
                                this会根据环境自动变化

                
               2.  浏览器上的事件天生就有一个特点,叫事件流。
                        事件冒泡:由里向外逐级触发
                        事件捕获:由外向里逐级触发


                3. 阻止事件冒泡:存在浏览器兼容问题
                      cancelBubble = true     // 给事件对象本身取消其冒泡属性
                      stopPropagation()        // 调用该事件对象的方法,阻止事件对象冒泡

     [F] 拖拽效果

               1.  拖拽三剑客:mousedown,mousemove,mouseup

                2. 实现方法:0. 目标对象设置为可移动的,即 position: absolute;

                                1. 鼠标左键按下时,记录鼠标与目标对象左上角的相对位置;

                                2. 鼠标移动时,将目标对象的位置设置为鼠标的位置减去它俩的相对位置;

                                3. 鼠标左键松开时,目标对象的位置不再变化。

                

               3.  拖拽效果的函数封装:

    // 拖拽(可以越界)
    function dragFree(node){
        node.onmousedown = function(ev){
            var e = ev || window.Event;
            // 保存鼠标按下时,鼠标与目标对象的相对位置
            var oLeft = e.clientX - node.offsetLeft;
            var oTop = e.clientY -node.offsetTop;
    
            document.onmousemove = function(ev){
                  var e = ev || window.Event;
                  // 鼠标移动时(此时已持续按下),修改目标对象的坐标
                  node.style.left = e.clientX - oLeft + "px";
                  node.style.top = e.clientY - oTop + "px";
            }
         }
         node.onmouseup = function(){
             document.onmousemove = null;
          }
    }    

     [G] 事件委托

                事件委托:

                        A委托B去买饭

                        A发布任务   委托方

                        B接受任务   代理方

                事件委托实现步骤:

                    1. 找到当前节点的父节点或者祖先节点

                    2. 将事件添加到你找到的父节点或者祖先节点上

                    3. 找到出发对象,判断出发对象是否是想要的出发对象,再进行后续的安排

    window.onload = function(){
                var oBtn = document.getElementById("btn1");
                var oUl = document.getElementById("ul1");
                // var oLists = oUl.getElementsByTagName("li");
                oUl.onclick = function(ev){
                    var e = ev || window.event;
                    var tar = e.target || window.event.srcElement;
                    if(tar.nodeName.toLowerCase() == "li"){
                        tar.style.backgroundColor = "red";
                    }
                }
                var i = 6;
                oBtn.onclick = function(){
                    var node = document.createElement("li");
                    node.innerHTML = i++ * 111;
                    oUl.appendChild(node);
                }
            }
    
    
        <button id="btn1">添加</button>
        <ul id="ul1">
            <li>111</li>
            <li>222</li>
            <li>333</li>
            <li>444</li>
            <li>555</li>
        </ul>

      

     [H] 事件监听器

                1. 传统的事件绑定存在两个问题:

                          a. 给同一个事件多次绑定,后面的会覆盖掉前面的,最终只有最后一个绑定有效

                          b. 当同一个事件被绑定多个函数时,无法精确的删除其中某一个函数

                2. 事件监听器可以解决上述两个问题

                       事件监听器的方法:

                               addEventListenser()

                                        格式:node.addEventListenser()

                                        参数:

                                          第一个参数  事件类型,如 click

                                          第二个参数  绑定的函数,如 fun1

                                          第三个参数  布尔值  false   事件冒泡,默认值

                                                                  true   事件捕获


                                removeEventListenser()

                                    格式:node.removeEventListenser()

                                      参数:

                                          第一个参数  事件类型,如 click

                                          第二个参数  需删除的函数名,如 fun1

                3. 事件监听器的兼容

                      在低版本IE中不兼容事件监听器

                      低版本IE支持 attachEvent() 和 detachEvent()

                    兼容函数:略

     [ I ] 动态生成表格

         练习

    [J] 放大镜效果

        等比例放大局部图片

        练习

  • 相关阅读:
    Git 几个常用操作
    Ubuntu16.04安装YouCompleteMe
    常用命令总结
    启动Kernel提示Bad Data CRC
    linux4.15.1编译init/mounts报错
    编译Linux-4.15.1内核时遇到:“error : openssl/bio.h :No such file or folder”
    添加mtdparts引起的问题
    arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression
    smartgit的安装
    ubuntu下安装wine
  • 原文地址:https://www.cnblogs.com/carreyBlog/p/13067109.html
Copyright © 2011-2022 走看看