JS实例-事件对象

作者: lemontree2000 | 来源:发表于2016-10-22 21:13 被阅读0次

    事件对象:存储了(描述了)事件更加详细的信息

        坐标信息(位置):
        横坐标(x轴):
            event.clientX;
            兼容:Chrome,IE系
            
            ev.clientX;
            兼容:高级浏览器
            低级:undefined
    
        兼容写法:
            var oEvent = ev || event;
    
    查看当前鼠标的坐标位置:
        onmousemove -> 当你移动鼠标时候
        触发非常密 不要用alert 调试
    

    eg:
    div跟着鼠标走
    *** 使用clientX,clientY 最好加上滚动宽度,高度 防止在滚动的时候DIV不跟随鼠标

    事件冒泡:

    子元素身上的事件,会传递给父元素,如果事件相同会执行,不相同不会执行,会继续往上冒

    发生包含关系,不是平级关系

    阻止事件冒泡:
    oEvent.cancelBubble = true;

    eg 放大镜(淘宝产品图):

    a). 鼠标移入、移出small 显示、隐藏span/big
        b). 给small添加移动事件
            1. 让span 跟着鼠标走
                (减去box的offsetLeft/offsetTop)
            2. 限制范围
                1). 左边最大移动距离
                small盒模型宽度/高度-span盒模型宽度/高度
                2). 右边最大移动距离
                大img的盒模型宽度/高度-big盒模型宽度/高度
            3. 算比例
                左边X轴:scaleX = x/maxW
                左边X轴:scaleY = y/maxH
            4. 右边比例 - > 算img的left/top
        scaleX = ? / (oImg.offsetWidth-oBig.offsetWidth)
        scaleY = ? / (oImg.offsetHeight-oBig.offsetHeight)
    
        比例:变化的数/定死的数
    

    键盘事件:

    <b>onkeydown 当按下键盘的时候</b>

    键位对应的键码:
    oEvent.keyCode -> 键码
    对应一个数字
    规律
    常用的键:

    删除键:8
    回车键:13
    
    左键:37
    上键:38
    右键:39
    下键:40
    

    组合键:
    *** 在js里面键码不能组合使用

        ctrl:
            ctrlKey
        shift:
            shiftKey
        alt: 
            altKey
    

    <b>oncontextmenu 当点击右键时候</b>

    默认行为:
    右键有菜单 表单能提交 文本框能输入内容 点击a链接能跳转...

    阻止默认行为:
    return false;

    阻止复制内容途径:
    a). ctrl + c
    b). 右键

    <b>eg 拖拽:</b>
    a). 按下鼠标
    onmousedown 当按下鼠标的时候
    b). 移动
    onmousemove 当移动鼠标的时候
    c). 抬起鼠标
    onmouseup 当抬起鼠标的时候

    问题:
        a). 快速拖拽div就不跟着走了
            解决:把move和 up加给docuemnt
        b). 会选中文字
            系统自带的
            阻止默认行为
            解决:return false;
    
            IE低版本出问题
            捕获(IE独有的):
    
    设置捕获
        obj.setCapture();
    
    释放捕获:
        obj.releaseCapture();
    

    克隆:
    obj.cloneNode(); -> 浅克隆
    返回新的物体

    obj.cloneNode(true); -> 深度克隆 会将内容也复制
    参数:默认是false -> 浅克隆


    事件冲突:
    同一个元素身上,添加了一个事件,但是希望执行不同的函数

    添加事件的方式:
        a). <input type="button" onclick="xxx"
        b). oBtn.onclick = xxxx;
    

    事件绑定:解决事件冲突
    一种全新的添加事件的方式

    事件绑定:
    obj.addEventListener(事件名,函数名,是否捕获);
    事件名 -> 不能加上 "on"
    
    兼容:高级浏览器
    obj.attachEvent(事件名,函数名);
    事件名 -> 加上 "on"
    兼容: IE10-
    
    兼容性:
        a). || 
        b). if  else
    
    封装一个给物体添加绑定事件的函数:
    obj -> 哪个物体
    sEv -> 事件名
    fn  -> 函数名
    addEvent(obj,sEv,fn);
    

    事件解绑定:
    问题:
    碰见匿名函数出问题了
    原因:
    函数每次都是new出来的,只要是new出来的东西都不相等

    关于匿名函数:

    obj.removeEventListener(事件名,函数名,是否捕获);
    事件名 -> 不能加上‘on’
    参数要与事件的绑定保持一致
    兼容:高级浏览器
    
    obj.detachEvent(事件名,函数名);
    兼容:IE10-
    
    兼容性:
        removeEvent(obj,sEv,fn);
    

    事件冒泡:
    子级 -> 父级
    事件的捕获(下沉):
    父级 -> 子级
    事件的捕获没用!! 直接给false
    obj.removeEventListener(事件名,函数名,false);


    this出问题的地方:
    a). 定时器里面的this
    b). 函数包了一层
    c). 事件绑定有问题(attachEvent)

    九宫格拖拽:
    4个边,4个角

    右边:
    var downX = oEvent.clientX;
    var oldW = oBox.offsetWidth;
    下边:
    var downY = oEvent.clientY;
    var oldH = oBox.offsetHeight;
    左边:
    var downX = oEvent.clientX;
    var oldW = oBox.offsetWidth;
    var oldL = oBox.offsetLeft;
    上边:
    var downY = oEvent.clientY;
    var oldH = oBox.offsetHeight;
    var oldT = oBox.offsetTop;


    碰撞检测::
    a). 什么时候碰上
    r1 > l2 && b1 > t2 && l1 < r2 && t1 < b2
    b). 判断没碰上 √
    r1 < l2 || b1 < t2 || l1 > r2 || t1 > b2

    相关文章

      网友评论

        本文标题:JS实例-事件对象

        本文链接:https://www.haomeiwen.com/subject/fldhuttx.html