• 编写可维护的JS 06


    7.事件处理

    //典型用法
    
        function handlerClick(event){
    
            var popup  = document.getElementById('popup');
    
            popup.style.left = event.clientX+'px';
            popup.style.top = event.clientY+'px';
        }

    1.隔离应用逻辑

    隔离应用逻辑
    
    /*
        上述代码只用到了 clientX/clientY 两个属性。 但是却将event事件整个传入 。
    */
    // 1 隔离应用逻辑
    
    /*
        上述例子中 操作popup的left/right值   算是一种应用逻辑,而这个应用逻辑可能其他地方也会操作
    
        既然其他地方也会操作这个应用逻辑。我们就将它独立出来 。
    
    */
    
    //拆分应用逻辑
    var myPopup = {
    
            handler:function(event){
    
                this.showpopup(event);
            },
    
            showpopup:function(event){
                 var popup  = document.getElementById('popup');
                popup.style.left = event.clientX+'px';
                popup.style.top = event.clientY+'px';
            }
    };
    
    //调用
    var obtn1=document.getElementById('btn1');
    
    obtn1.addEventListener('click',function(event){
    
        myPopup.handler(event);
    
    },false);

    应用逻辑有可能被多处使用,如果正常写可能会被复制很多份,将应用逻辑和事件处理拆分开

    2. 不要分发事件对象

    /*
        在1里面  只需要用到clientX 和clientY 但是却将event时间对象穿进去。
    
        好的api  依赖是透明的。 showpopup方法只需要2个数据 而不是一个event
    
        传递一个event进去反而将事情变得复杂。
    
    */
    //重写以上例子
    var myPopup2 = {
            handler:function(event){
                event.preventDefault();
                event.stopPropagation();
    
                this.showpopup(event.clientX,event.clientY);
            },
    
            showpopup:function(x,y){
    
                var popup  = document.getElementById('popup');
                popup.style.left = x+'px';
                popup.style.top = y+'px';
               }
    };
    //调用
    var obtn2=document.getElementById('btn1');
    
    obtn1.addEventListener('click',function(event){
    
        myPopup2.handler(event.clientX,event.clientY);
    
    },false);
    Now or nerver .
  • 相关阅读:
    OpenSSL生成证书、密钥
    js中对String去空格
    正则表达式
    webapi调用
    记一次完整的CI持续集成配置过程(.net core+Jenkins+Gitea)
    处理asp.net core连接mysql的一个异常Sequence contains more than one matching element
    asp.net core 3.1+mysql8.0+Hangfire遇到的异常解决记
    升级到asp.net core 3.1遇到的json异常
    了解ASP.NET Core端点路由
    asp.net core 2.2升到3.1遇到的问题小记
  • 原文地址:https://www.cnblogs.com/iyueyao/p/3385722.html
Copyright © 2020-2023  润新知