多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 原生Javascript插件封裝開發實踐

原生Javascript插件封裝開發實踐

來源:程序員人生   發布時間:2017-02-15 09:34:39 閱讀次數:4316次

前言

之前公司設計的網站比較混亂,很多地方不統1,其中1個就是彈出層,致使這個緣由是由于,公司的UI換了好幾個人,而他們每一個人做出來的都不太1樣。最近公司開始整理這個問題,對統1的這類東西固然是做成1個模塊,或插件,而我打算做成插件。之所以寫這篇文章是由于,當寫完這個插件以后,發現其中有很多的理念,而這些理念我想把它總結1下,雖然這個插件其實不復雜。

該怎樣架構?

對架構這個概念,接觸的比較少,我的理解,架構就是解決未來可能會產生的事。

之前也封裝過1些插件,但后端嫌我封裝的太難用,因而分析其緣由,發現之前寫的插件,該暴露的接口沒有,有些不需要傳的參數反而要傳。該暴露的接口沒有,這是由于我沒有依照未來的思想來寫插件,而常常這樣寫出來的插件就成了1次性用品。

所以這段時間,在寫插件之前都會事前思考清楚,這個插件都需要哪些參數,而哪些又是必須傳的,哪些是可選的,哪些功能以后可能會用到,哪些是可以會更改的,這些都是必須斟酌的,不然寫出來的插件肯定會有很多的問題。

基本雛形

(function(window,document){
    var MaskShare = function(){

    };
    MaskShare.prototype = {};

    window.MaskShare = MaskShare;
}(window,document));

把要寫的代碼,封閉到1個自履行函數里面,避免變量沖突,然后將這個構造函數暴露給window對象,方便我們在外部去訪問這個構造函數。

效果需要做成以下的:


思考需要哪些參數

這個功能就是點擊某個元素,彈出1個遮罩層,點擊遮罩層將遮罩層去掉。

因此可以分析出,最少需要1個參數,也就是我們需要知道點擊誰彈出彈出層,另外我們還需要配置1些默許參數。

(function(window,document){
    var MaskShare = function(targetDom,options){
        // 判斷是用函數創建的還是用new創建的。這樣我們就能夠通過MaskShare("dom") 或 new MaskShare("dom")來使用這個插件了
        if(!(this instanceof MaskShare))return new MaskShare(targetDom,options);

        // 參數合并
        this.options = this.extend({
                        // 這個參數以后可能會更改所以暴露出去
            imgSrc:"../static/img/coupon-mask_1.png"
        },options);

        // 判斷傳進來的是DOM還是字符串
        if((typeof targetDom)==="string"){
            this.targetDom = document.querySelector(targetDom);
        }else{
            this.targetDom = targetDom;
        }

        var boxDom = document.createElement("div");
        var imgDom = document.createElement("img");

        // 設置默許樣式 注意將z-index值設置大1些,避免其他元素層級比遮罩層高
        boxDom.style.cssText = "display: none;position: absolute;left: 0;top: 0;width: 100%;height:100%;background-color: rgba(0,0,0,0.8);z-index:9999;";
        imgDom.style.cssText = "margin-top:20px;width: 100%;";

        // 追加或重設其樣式
        if(this.options.boxDomStyle){
            this.setStyle(boxDom,this.options.boxDomStyle);
        }
        if(this.options.imgDomStyle){
            this.setStyle(imgDom,this.options.imgDomStyle);
        }

        imgDom.src = this.options.imgSrc;
        boxDom.appendChild(imgDom);
        this.boxDom = boxDom;

        // 初始化
        this.init();
    };
    MaskShare.prototype = {
        init:function(){
            this.event();
        },
        extend:function(obj,obj2){
            for(var k in obj2){
                obj[k] = obj2[k];
            }
            return obj;
        },
        setStyle:function(dom,objStyle){
            for(var k in objStyle){
                dom.style[k] = objStyle[k];
            }
        },
        event:function(){
            var _this = this;

            this.targetDom.addEventListener("click",function(){
                document.body.appendChild(_this.boxDom);
                _this.boxDom.style.display = "block";
                                // 打開遮罩層的回調
                _this.options.open&&_this.options.open();
            },false);

            this.boxDom.addEventListener("click",function(){
                this.style.display = "none";
                                // 關閉遮罩層的回調
                _this.options.close&&_this.options.close();
            },false);
        }
    };
    // 暴露方法
    window.MaskShare = MaskShare;
}(window,document));

使用示例:

MaskShare(".immediately",{
    imgSrc:"../static/img/loading_icon.gif",
    boxDomStyle:{
        opacity:".9"
    },
    imgDomStyle:{
        opacity:".8"
    },
    open:function(){
        console.log("show");
    },
    close:function(){
        console.log("close");
    }
});

本次總結

此時再分析1遍,發現其還是有很多局限性,比如,如果不使用圖片用到的是1段文字呢,又該怎樣辦?這些都是很大的問題,要寫出1個實用的插件,不單單技術需要過關,思考還得全面性。所以這篇文章還只是剛剛開始,路還遠著呢。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 免费视频观看在线www日本 | 欧美日韩亚洲综合在线一区二区 | 日本欧美不卡一区二区三区在线 | 九九爱精品视频 | 国产一区亚洲二区三区毛片 | 男女激情视频 | 亚洲色图视频在线 | 波多野结衣久久 | 国产日韩久久久精品影院首页 | 中文字幕在线看 | 另类小说图片 | 国产成人啪午夜精品网站男同 | 亚洲国产欧美精品一区二区三区 | 毛片免费在线观看网址 | 91精品乱码一区二区三区 | 国产一起色一起爱 | 2022久久国产精品免费热麻豆 | 亚洲女人被黑人巨大进入 | 免费一区二区三区四区 | 一本久道久久综合婷婷五 | 成人亚洲国产综合精品91 | 国产在线精品福利大全 | 男人看的网址 | a网站在线观看免费网站 | 日本www视频在线观看 | 午夜成年视频 | 欧洲免费无线码一二区 | 手机在线成人精品视频网 | 亚洲第一色在线 | 精品一区精品二区 | 日韩一级片免费在线观看 | 国产欧美日韩在线人成aaaa | 欧美一级视频在线高清观看 | 国产精品成aⅴ人片在线观看 | 欧美日韩亚洲国内综合网香蕉 | 欧美色成人| 性欧美18~19sex高清播放 | 国产免费一区二区三区免费视频 | 欧美日韩国产一区二区三区欧 | 日韩精品一区二区三区中文精品 | 国产欧美在线观看视频 |