zoukankan      html  css  js  c++  java
  • 20,事件应用,事件绑定attachEvent,addEventListener,捕获事件setCapture()

    在同一个对象上加两次相同的事件,会被覆盖,所以用事件绑定,就不会被覆盖了;

    事件绑定;obj.attachEvent('onclick',fun)://ie              解除绑定:detachEvent;

         obj.addEventListener('click',fun,false)//firefox.chrome                           removeEventListener;

     事件捕获:obj.setCapture();只在ie6-8中解决问题,ie9,ff,chrome中的拖拽影响其他对象的问题已经被return false解决掉;

    例子:事件绑定

     封装事件绑定函数function attachEvent(obj,attr,fun);

    js

    <script>
    function myAddEvent(obj, ev, fn)
    {
        if(obj.attachEvent)
        {
            obj.attachEvent('on'+ev, fn);
        }
        else
        {
            obj.addEventListener(ev, fn, false);
        }
    }
    
    window.onload=function ()
    {
        var oBtn=document.getElementById('btn1');
        
        myAddEvent(oBtn, 'click', function (){
            alert('a');
        });
        
        myAddEvent(oBtn, 'click', function (){
            alert('b');
        });
    };
    </script>
    View Code

     例子:拖拽(当页面中不只是有一个div,还包括文字,图片等的时候,拖拽div,不影响其他对象)

    用事件绑定,把其他对象的事件都绑定到div上,当鼠标抬起时再接触绑定:oDiv.releaseCapture();

    <script>
    window.onload=function ()
    {
        var oDiv=document.getElementById('div1');
        
        var disX=0;
        var disY=0;
        
        oDiv.onmousedown=function (ev)
        {
            var oEvent=ev||event;
            
            disX=oEvent.clientX-oDiv.offsetLeft;
            disY=oEvent.clientY-oDiv.offsetTop;
            
            if(oDiv.setCapture)
            {
                //IE
                oDiv.onmousemove=mouseMove;
                oDiv.onmouseup=mouseUp;
                
                oDiv.setCapture();
            }
            else
            {
                //Chrome、FF
                document.onmousemove=mouseMove;
                document.onmouseup=mouseUp;
            }
            
            function mouseMove(ev)
            {
                var oEvent=ev||event;
                var l=oEvent.clientX-disX;
                var t=oEvent.clientY-disY;
                
                oDiv.style.left=l+'px';
                oDiv.style.top=t+'px';
            }
            
            function mouseUp()
            {
                this.onmousemove=null;
                this.onmouseup=null;
                
                if(oDiv.releaseCapture)
                {
                    oDiv.releaseCapture();
                }
            }
            
            return false;    //chrome、ff、IE9
        };
    };
    </script>
    View Code

    例子:div2套div1,div1拖拽拖不出div2;

    将拖拽改进,四边最大移动的距离设置成div2的四边;

    <script>
    window.onload=function ()
    {
        var oDiv=document.getElementById('div1');
        var oDiv2=document.getElementById('div2');
        
        var disX=0;
        var disY=0;
        
        oDiv.onmousedown=function (ev)
        {
            var oEvent=ev||event;
            
            disX=oEvent.clientX-oDiv.offsetLeft;
            disY=oEvent.clientY-oDiv.offsetTop;
            
            document.onmousemove=function (ev)
            {
                var oEvent=ev||event;
                var l=oEvent.clientX-disX;
                var t=oEvent.clientY-disY;
                
                if(l<0)
                {
                    l=0;
                }
                else if(l>oDiv2.offsetWidth-oDiv.offsetWidth)
                {
                    l=oDiv2.offsetWidth-oDiv.offsetWidth;
                }
                
                if(t<0)
                {
                    t=0;
                }
                else if(t>oDiv2.offsetHeight-oDiv.offsetHeight)
                {
                    t=oDiv2.offsetHeight-oDiv.offsetHeight;
                }
                
                oDiv.style.left=l+'px';
                oDiv.style.top=t+'px';
            };
            
            document.onmouseup=function ()
            {
                document.onmousemove=null;
                document.onmouseup=null;
            };
            
            return false;
        };
    };
    </script>
    View Code
  • 相关阅读:
    修改host指定域名指向ip,Windows脚本与Linux脚本
    Linux磁盘分区/格式化/挂载目录
    给普通用户赋予sudo权限后报错,提示/etc/sudoers文件权限拒绝
    SUSE12-SP2安装教程(虚拟机)
    ios键盘弹起 body的高度拉长,页面底部空白问题。ios软键盘将页面抵到上面后,关闭软键盘页面不回弹的问题。
    Visual Studio动态生成版权信息
    微信发支付宝红包(花呗)
    纯CSS打造淘宝导航菜单栏
    用bat批处理程序通过DOS命令行删除所有的空文件夹
    从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法
  • 原文地址:https://www.cnblogs.com/maoduoduo/p/3169709.html
Copyright © 2011-2022 走看看