首页 > 其他 > 详细

常用设计模式

时间:2019-09-11 17:02:49      阅读:79      评论:0      收藏:0      [点我收藏+]

1.外观模式

外观模式一般用于对底层代码的封装,解决一些类似浏览器兼容的问题。

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #root {
            width: 300px;
            height: 200px;
            background-color: #ff0;
        }
    </style>
</head>
<body>
    <div id="root">
        test
    </div>
    <script>
        /*
            下面方法实现给document绑定多个事件,不能用on事件
            当单击root时正常,单击之外的弹出信息
        */
        var ele = document.getElementById(‘root‘);
        // 第一个外观模式封装的函数,解决浏览器兼容问题
        function addEvent(el, type, fn) {
            if (el.addEventListener) { // 如果支持addEventListener DOM2级
                el.addEventListener(type, fn);
            } else if (el.attachEvent) { // IE9-等 DOM2级
                el.attachEvent(type, fn);
            } else { // 以上两种都不支持
                el[‘on‘ + type] = fn; // DOM1级事件,重复定义会被覆盖
            }
        }
        // 第二个外观模式封装的函数
        function definePreventDefault(event) {
            if (event.preventDefault) {
                event.preventDefault();
            } else {
                event.returnValue = false; // IE
            }
        }
        // 第三个外观模式封装的函数
        function getTarget(event) {
            return event.target || event.srcElement; // IE是event.srcElement
        }
        function doSth(text) {
            // e.preventDefault();  ---IE低版本不支持
            // if (e.target !== ele) { // TODO } --- e.target的IE低版本不支持
            return function(e) {
                const event = e || window.event; // 低版本IE下是window.event
                definePreventDefault(event);
                console.log(getTarget(event))
                if (getTarget(e) !== ele) {
                    alert(text)
                }                
            }
        }
        addEvent(document, ‘click‘, doSth("哼"))
        addEvent(document, ‘click‘, doSth("哈"))
        addEvent(document, ‘click‘, doSth("呵"))
    </script>
</body>
</html>
View Code

 

常用设计模式

原文:https://www.cnblogs.com/lyraLee/p/11506749.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!