zoukankan      html  css  js  c++  java
  • 补充(事件对象)

    1.常用的事件

    onmousemove,onmouseover,onmouseup,onmousedown,onmouseout,onclick........

    2.每个元素身上的事件是天生自带的,不需要我们去定义,只需要我们给这个是事件绑定一个方法,当事件触发的时候就会执行这个方法。

    3.事件绑定的写法

    1.div.onclick=function(){}  DOM0级事件绑定

    2.div.addEventListener()或div.attachEvent()  DOM2级事件绑定

    二者的区别

    Onclick是这个元素私有的属性,天生自带的,而addEventListener()是公有的属性,从EventTarget(事件源)对象上继承来的。

    Ie低版本的attachEvent是公有的。

    Div.onclick 存在事件冒泡机制没有捕获机制

    Div.addEventListener() 可有冒泡可有捕获

    Div.attachEvent()只有冒泡机制

    4.div.addEventListener和div.attachEvent的区别

    1.前者有冒泡和捕获机制,后者只有冒泡机制

    2.事件名前者不带on后者带on

    3.前者this指向当前元素,后者指向window

    4.前者是标准浏览器的写法,后者是ie8以下

    Arguments

    每个函数都有一个arguments对象,他是这个函数所有参数构造的集合

    上面的控制台是arguments数组中有一个元素叫mouseevent。

    所以,每个事件的方法中浏览器都给他一个参数叫mouseevent。我们所有鼠标的信息都临时存储在这个mouseevent对象上。

    Mouseevent有兼容性

    标准浏览器可以直接读取,但是ie不行

    解决办法

     var ev=ev||window.event

    Event对象的兼容性

    clientX和clientY是鼠标到浏览器窗口左上角的距离坐标

    pageX和pageY是鼠标到网页左上角的距离坐标,但是ie低版本没有这个属性

    在ie下怎么算pageY的值 用clientY+scrollTop

    事件源 点击哪个元素,哪个元素就是事件源

    标准浏览器的事件源是ev.target

    Ie6-8没有这个属性 但是ie有ev.srcElement

    阻止事件冒泡兼容性

    1.event.cancelBubble=true

    2.event.stopPropagation?event.stopPropagation():event.cancelBubble=true

    阻止事件默认行为兼容性

    比如 a的href

    Href为空 会自动刷新页面

    Href为# 锚点跳转

    Href为javascript:;阻止默认行为的发生

    Event.preventDefault?Event.preventDefault():event.returnValue=false

    事件委托

    如果子元素身上绑定大量相同的事件,我们尽量采用事件委托,所有子元素把自己的事件委托给父级了。

    原理:采用事件冒泡机制完成

    为什么使用事件委托呢

    传统的for循环绑定事件,会增加大量的dom操作(事件),影响页面性能,采用事件委托就是把所有的事件基于一个元素上

    事件委托和传统的事件绑定的优势

    传统的事件绑定对新增元素不起作用,事件委托起作用

    传统的事件绑定,有多少元素js就需绑定多少事件,事件委托只需要一个事件

    案例

    div.onclick=function(){}

    传统写法

    事件委托建议采纳

    5.并不是所有的事件都存在事件冒泡

    onmouseenter  onmouseleave就没有事件冒泡机制

    所以我们做跟随鼠标的时候尽量用这两个事件,不要mouseover mouseout

    12.4

    DOM0级事件元素绑定多个click最后只执行最后一个click。

    DOM2级事件元素绑定多个click,都要执行

    注意当绑定的多个事件名,函数名,事件发生阶段三者完全一样时,才执行最后一个

    div.addEventListener("click",fn1,false)

        div.addEventListener("click",fn1,false)

    第二参数尽量不要使用匿名函数

    区别

    1. dom0级绑定多个相同的事件,后者会覆盖前者,dom2级不会
    2. Dom0只适合普通事件,Dom2级还有指定的事件类型如DOMContentLoaded(当html文档结构加载完成之后执行)这个事件就是jquery中的$(document).ready()

    Window.onload和$(document).ready()的区别

    2.事件取消 DOM0级直接赋值null,DOM2级需要使用removeEventListener()

    div.onclick=function(){

            console.log(123)

        }

    div.onclick=null;  DOM0级取消事件

    div.addEventListener("click",fn1,false)

        function fn1(){

            console.log(123)

        }

    div.removeEventListener("click",fn1,false) DOM2级取消事件

    键盘事件

    键盘事件

    onkeydown  onkeyup

    键盘事件触发时,浏览器天生给方法一个叫KeyboardEvent的对象,所有键盘的信息都在这个对象上。

    我们发现ev有个属性keyCode 键盘编码

    document.onkeydown=function(ev){

            var ev=ev||window.event

            console.log(ev.keyCode)

        }

    右击鼠标事件  oncontextmenu  鼠标右击事件

    12.5

    百叶窗

    12.10

    1. 解决函数内this指向
    2. 可以在函数外提前声明变量 _this/that=this
    3. 通过apply和call 来修改函数内的this指向

    (1)      二者区别 用法是一样的,就是参数形式不一样  fn.call(obj,a,b)/fn.apply(obj,[a,b])

    (2)      二者代表的是将函数内的this换成obj之后然后把fn调用

    1. bind修改函数内的this

    Fn.bind(obj,a,b) 只是替换了this但是不调用fn,返回的还是函数

    Fn.bind(obj,a,b)()

    1.  

    相当于写成

    为什么用了call之后里面的names还是张三不是李四??

    fn.call(obj) 是fn继承了obj中的所有属性,只要是继承的可以看成是公有的,天生自带的是私有的,在使用的时候,私有的有就不会找公有的。

    1. 变量交换

    var a=4;

        var b=3;

        var n=null;

        n=a;

        a=b;

        b=n;

        console.log(a,b)

    找出数组中的最大项和最小项

    var a=[45,26,15,54,36,8,4];

    1. 借助math中max

    Math.max.apply(null,a) 返回值就是最大值

    1. 借助数组中的sort()

    var fn=function(a,b){

            return a-b

        }

        var s=a.sort(function(a,b){return a-b})

        console.log(s[s.length-1])

    3.假设法

     var min=a[0] //假设第一个就是我们需要的最小值

     var num=null;

     for(var i=1;i<a.length;i++){

        if(min>a[i]){

            num=min;

            min=a[i];

            a[i]=num

        }

     }

     console.log(min)

    对数组排序的方法

    1.借助array中的sort(function(a,b){return a-b})

    2.冒泡排序

    var arr=[45,26,15,54,36,8,4];

    var num=null

    for(var j=arr.length-1;j>=0;j--){

    //for(var k=0;k<arr.length-1;k++){

        //for(var i=0;i<arr.length-k;i++){

        for(var i=0;i<=j;i++){

            if(arr[i]>arr[i+1]){

                num=arr[i];

                arr[i]=arr[i+1];

                arr[i+1]=num

            }

        }

    }

    数据库排序   游戏排名

    二分查找

     

    4.Math 数值对象

    Js自带的类  array number string function date math regexp boolean

    Math类 math对象 又研究一堆的属性和方法

     

    数学中的弧度和角度

    1.弧度的π   Math.PI

    2.返回平方根  Math.sqrt(16)

    3.Math.abs(x) 返回的绝对值

    4.Math.ceil(x) 返回x的上舍入

    5.Math.floor(x) 返回x的下舍入

    6.Math.max(a,b,c,d)返回a,b,c,d中的最大值 a,b,c,d必须是数字

    7.Math.min(a,b,c,d)返回a,b,c,d中的最小值 a,b,c,d必须是数字

    8.Math.random()返回0-1之间的随机数

    9.Math.round(x) 返回对x四舍五入后的数值

    10.Math.sin(x) 返回x的正弦值  对边比斜边

    11.Math.cos(x) 返回x的余弦值  邻边/斜边

    12.Math.tan(x) 返回x的正切值  对边/邻边

    13.Math.asin(x)

    14.Math.acos()

    15 math.atan()

  • 相关阅读:
    django 之(一) --- DjangoRestFormwork
    工具 --- Git理解
    部署 --- Docker使用
    django 之(三) --- 会话|关系|静态*
    flask 之(七) --- 认证|文件|部署
    系统 --- Linux系统环境搭建
    flask 之(六) --- API|RestfulApi
    flask 之(五) --- 对象|钩子|拆分
    数据类型检测
    基本数据类型和引入数据类型
  • 原文地址:https://www.cnblogs.com/mo123/p/10104596.html
Copyright © 2011-2022 走看看