自定義事件

/*

 * 
 * 封裝自定義移動端事件庫
 * */

;(function (window,undefind) {
    
    var query = function (selector) {
        return query.fn.init(selector);
    }   
    query.fn = query.prototype = {
        //初始化方法(就是獲得當(dāng)前query對象的方法)
        init : function (selector) {
            if (typeof selector == "string") {
                //通過傳入的選擇器獲取頁面元素,并且綁定在當(dāng)前對象中
                this.element = document.querySelector(selector);
                console.log(this);
                return this;    
            }
        },
        //單擊事件
        tap:function (handler) {
            this.element.addEventListener("touchstart",touchFn);
            this.element.addEventListener("touchend",touchFn);
            
            //記錄按下和抬起的時間
            var startTime,endTime;
            
            //事件觸發(fā)函數(shù)
            function touchFn(e) {
                switch (e.type){
                    case "touchstart":
                    startTime = new Date().getTime();
                        break;
                    case "touchend":
                    endTime = new Date().getTime();
                    //抬起的時候觸發(fā)
                    if ((endTime-startTime)<500) {
                        handler();
                    }
                    break;
                }
            }
//          handler("大家好");
        },  
        
        //長按事件
        longTap:function (handler) {
            this.element.addEventListener("touchstart",touchFn);
            this.element.addEventListener("touchend",touchFn);
            
            var timerId;
            function touchFn (e) {
                switch (e.type){
                    case "touchstart":
                        timerId = setTimeout(function () {
                            handler();
                        },500)
                        break;
                    case "touchend":
                        clearTimeout(timerId);
                        break;
                }
            }
        },
        //雙擊事件
        doubleTap:function (handler) {
            this.element.addEventListener("touchstart",touchFn);
            this.element.addEventListener("touchend",touchFn);
            var startTime = 0,baseTime = 0,intervalTime = 0;
            function touchFn (e) {
                switch (e.type){
                    case "touchstart":
                        startTime = new Date().getTime(); 
                        break;
                    case "touchend":
                        intervalTime = startTime - baseTime;
                        baseTime = startTime;
                        if (intervalTime < 300) {
                            handler();
                        }
                        break;
                }
            }
        },
        
        //上滑事件
        slideUp : function (handler) {
            this.element.addEventListener("touchstart",touchFn);
            this.element.addEventListener("touchend",touchFn);
            this.element.addEventListener("touchmove",touchFn);
            var startX = 0,startY = 0,endX = 0,endY = 0;
            function touchFn (e) {
                switch (e.type){
                    case "touchstart":
                        startX = e.targetTouches[0].pageX;
                        startY = e.targetTouches[0].pageY;
                        break;
                    case "touchmove":
                        endX = e.targetTouches[0].pageX;
                        endY = e.targetTouches[0].pageY;
                        if ((endY - startY < -20)&&(Math.abs(endX - startX)<50)) {
                            handler();
                        }
                        break;
                }
            }
        },
        //下滑事件
        slideDown : function (handler) {
            this.element.addEventListener("touchstart",touchFn);
            this.element.addEventListener("touchend",touchFn);
            this.element.addEventListener("touchmove",touchFn);
            var startX = 0,startY = 0,endX = 0,endY = 0;
            function touchFn (e) {
                switch (e.type){
                    case "touchstart":
                        startX = e.targetTouches[0].pageX;
                        startY = e.targetTouches[0].pageY;
                        break;
                    case "touchmove":
                        endX = e.targetTouches[0].pageX;
                        endY = e.targetTouches[0].pageY;
                        if ((endY - startY > 30)&&(Math.abs(endX - startX)<50)) {
                            handler();
                        }
                        break;
                }
            }
        },
        //右滑事件
        slideRight : function (handler) {
            this.element.addEventListener("touchstart",touchFn);
            this.element.addEventListener("touchend",touchFn);
            this.element.addEventListener("touchmove",touchFn);
            var startX = 0,startY = 0,endX = 0,endY = 0;
            function touchFn (e) {
                switch (e.type){
                    case "touchstart":
                        startX = e.targetTouches[0].pageX;
                        startY = e.targetTouches[0].pageY;
                        break;
                    case "touchmove":
                        endX = e.targetTouches[0].pageX;
                        endY = e.targetTouches[0].pageY;
                        if ((endX - startY > 30)&&(Math.abs(endY - startY)<50)) {
                            handler();
                        }
                        break;
                }
            }
        },
        //左滑事件
        slideLeft : function (handler) {
            this.element.addEventListener("touchstart",touchFn);
            this.element.addEventListener("touchend",touchFn);
            this.element.addEventListener("touchmove",touchFn);
            var startX = 0,startY = 0,endX = 0,endY = 0;
            function touchFn (e) {
                switch (e.type){
                    case "touchstart":
                        startX = e.targetTouches[0].pageX;
                        startY = e.targetTouches[0].pageY;
                        break;
                    case "touchmove":
                        endX = e.targetTouches[0].pageX;
                        endY = e.targetTouches[0].pageY;
                        if ((endX - startY < -30)&&(Math.abs(endY - startY)<50)) {
                            handler();
                        }
                        break;
                }
            }
        },
        
        
    }
    query.fn.init.prototype = query.fn;
    window.$ = window.query = query;

} )(window,undefined);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容