day11

88 阅读5分钟

1.鼠标事件

+ 一些依赖鼠标行为触发的事件

 获取元素
var ele = document.querySelector('div')

1. click
ele.onclick = function () { console.log('鼠标左键单击') }

2. dblclick
ele.ondblclick = function () { console.log('鼠标左键双击') }

3. contextmenu
ele.oncontextmenu = function () { console.log('鼠标右键单击') }

4. mousedown
ele.onmousedown = function () { console.log('鼠标按键按下') }

5. mouseup
ele.onmouseup = function () { console.log('鼠标抬起事件') }

6. mousemove
ele.onmousemove = function () { console.log('鼠标移动事件') }

7. mouseover
 //移入后代元素会触发事件    子元素会受到这个事件并且向上冒泡给父元素
ele.onmouseover = function () { console.log('鼠标移入事件') }

8. mouseout
 //移入后代元素会触发事件    子元素会受到这个事件并且向上冒泡给父元素
ele.onmouseout = function () { console.log('鼠标移出事件') }

9. mouseenter
 //移入后代元素不会触发事件   子元素不会向上冒泡给父元素
ele.onmouseenter = function () { console.log('鼠标移入事件') }

10. mouseleave
 //移入后代元素不会触发事件   子元素不会向上冒泡给父元素
ele.onmouseleave = function () { console.log('鼠标移出事件') 

2.e中的属性

 type   事件类型
 timeStamp  从页面渲染完成后到触发事件所需要的毫秒数
 target    目标对象 
 srcElement  目标对象 
 currentTarget  事件侦听对象
 bubbles 是否允许冒泡 只读
 cancelBubble 是否取消冒泡
 cancelable 取消冒泡 只读(抛发事件时设置)
 view 视窗
 path 冒泡路径
 ctrlKey  是否按下ctrl键
 metaKey  是否按下command键(苹果)
 shiftKey 是否按下shift键
 altKey 是否按下alt键
 which 按下那个键   左键 1     右键 3


        //DOM 元素的位置都是Left Top
        // 鼠标的位置都是 x,y
        
         //1. 当前鼠标相对视口距离
        clientX: 734
        clientY: 109
        x: 734
        y: 109

        //2. mousemove  相对上次移动的距离 向右和下为正值,向左和上为负值
        movementX: 0
        movementY: 0

        //3. 绝对页面顶端左上角的距离
        pageX: 734
        pageY: 109

        //4. 相对屏幕左上角的距离
        screenX: 734
        screenY: 220
    
        //5. 相对目标 e.target的左上角距离
        offsetX: 65
        offsetY: 51
        // 如果目标对象没有定位,相对向上的父容器(定位的)左上角位置
        // 如果目标对象定位了,相对目标对象左上角位置
        layerX: 65
        layerY: 51      

3.拖拽小案例

  拖拽可以做验证码 拖拽验证
  
  var divs=document.querySelectorAll(".div1");  //获取到div1 列表 
  divs.forEach(function(item){           //因为同时操作多个div1 所以到遍历每一个添加mousedown事件
    item.addEventListener("mousedown",mouseHandler);
    })

    function mouseHandler(e){
        if(e.type==="mousedown"){
            // this-->就是按下的div
            this.offsetX=e.offsetX;
            this.offsetY=e.offsetY;
            document.div=this;         //div就是个属性名
            document.addEventListener("mousemove",mouseHandler);
            document.addEventListener("mouseup",mouseHandler);
        }else if(e.type==="mousemove"){
            // this-->就是document
            this.div.style.left=e.clientX-this.div.offsetX+"px";
            this.div.style.top=e.clientY-this.div.offsetY+"px";
        }else if(e.type==="mouseup"){
            document.removeEventListener("mousemove",mouseHandler);
            document.removeEventListener("mouseup",mouseHandler);
        }
    } 

4.表单事件

 表单事件
    + 专门给表单元素使用的
    
// 获取元素
var inp = document.querySelector('input')
var form = document.querySelector('form')


1. focus
 inp.onfocus = function () { console.log('聚焦事件') }
 // e.relatedTarget  上次聚焦的对象

2. blur
 inp.onblur = function () { console.log('失焦事件') }

 !!!focusin focusout  聚焦和失焦事件,但是可以做事件委托,向父容器冒泡(比focus和blur更好用)

3. change
// 当 失焦 的时候, 如果内容和 聚焦 的时候不一样, 才会触发
 inp.onchange = function () { console.log('内容发生变化了') }

4. input  
// 表单输入事件, 只要表单的内容发生变化, 随时变化随时触发,可以事件委托给form表单
 inp.oninput = function () { console.log('内容修改了') }

5. reset
// 表单重置事件
//   事件需要绑定给 form 标签, 通过点击 reset 按钮来触发
 form.onreset = function () { console.log('表单重置了') }

6. submit
// 表单提交事件
//   事件需要绑定给 form 标签, 通过点击 submit 按钮来触发
 form.onsubmit = function () { console.log('表单提交了') }
 
补充:
e.inputType  输入的类型
e.isComposing 是否是输入法输入
e.data 当前输入的内容

5.按键事件

1.e.code: "ArrowLeft" 按下键的键名
2.key: "ArrowLeft" 按下键的键名
3.keyCode: 37  键码
4.which: 37   键码
5.repeat: false 是否重复按下

6.正则表达式的创建

正则表达式创建
       
修饰符
g  全局查找
i  不区分大小写

/正则表达式内容/修饰符
var reg=/a/g

var reg=new RegExp(正则表达式内容,修饰符)
var reg=new RegExp("a","g");

7.正则表达式针对字符串处理

正则方法
test();  是否test中的字符满足正则表达式
exec();  查找到满足的内容,并且返回这个内容对应的下标位置

字符串方法
match(); 高频使用方法  查找满足正则的字符内容,并且返回一个由满足内容组成的数组
search();  在字符串中查找满足正则内容的字符,返回下标
replace();高频使用方法 替换方法
split(); 切割,使用正则切割

8.元字符

1. .  元字符  通配符,代表任意一个字符
console.log("abac".match(/a./)); //['ab', index: 0, input: 'abac', groups: undefined]
console.log("abac".match(/a./g)); //['ab', 'ac']

console.log("abcade".match(/a../g)) // ['abc', 'ade']
console.log("abcadcadd".match(/a.c/g)) //['abc', 'adc']

2. \.  转义 将通配符变为字符.
console.log("abca.cadd".match(/a\.c/g)) // ['a.c']
console.log("a\\b".match(/a\\/)[0]) // a\

3. [] 元字符 []内字符可以代表任何一个字符,或者的作用,可以在[]中选择任意一个字符
console.log("abcaccadc".match(/a.c/g)) //['abc', 'acc', 'adc']
console.log("abcaccadc".match(/a[bc]c/g)) //['abc', 'acc']

4. /[ab][cd]/g    ac ad bc bd
在[]中. 不是通配符,而是字符.
console.log("aba.ad".match(/a[b.]/g)); //['ab', 'a.']
console.log("abca.cadd".match(/a[.]c/g)) //['a.c']

5. [^] 不要某个字符 
   /[1356790]/
   /[^248]/  如果^在[]里面的第一位,这个[]的内容取反 [1356790a-zA-Z.其他各种符号]
   console.log("abcadcaec".match(/a[^d]c/g))

6. /[^\^]/ 匹配非^的所有字符
   console.log("a^bacb".match(/a[^\^]b/g));
   如果 ^不是在[]的第一位,则表示单一的^字符
   [a^c] 满足a或者^或者c  

   var str="abacadae";
   str=str.replace(/[bd]/g,"z");
   str=str.replace(/[^cd]/g,"z");
   str.replace(正则,function(被查找到元素,索引值,原字符串){
           return 返回内容   替换被查找的元素
   })
   
7. /[1-3]/  [123]
   /[a-z]/  [abcdefghijklmnopqrstuvwxyz]
   /[A-Z]/   [A....Z]
   /[0-9]/  [0123456789]
   /3[0-3]/  30 31 32 33
   /[1-31]/   [1-3 1]  [123];
   /[11122]/  [12]
   
  \w   [a-zA-Z0-9_]
  \W    [^a-zA-Z0-9_]
  \d   [0-9]
  \D   [^0-9]
  \s   空格  空白字符
  \S   非空格  非空白字符