国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

原生JS封裝拖動(dòng)驗(yàn)證滑塊你會(huì)嗎?

共 53434字,需瀏覽 107分鐘

 ·

2021-03-23 19:48

群里小伙伴投稿 作者:_release
原文地址:https://juejin.im/post/5ed37a73e51d45788c739784

前言

閑著沒事,就想著寫寫原生js玩玩,在網(wǎng)上看了幾個(gè)效果后決定做這個(gè)效果,并且使用了prototype和eventEmitter封裝成了庫。

最終效果

分析

看到這個(gè)效果我們首先應(yīng)該想到和拖動(dòng)有關(guān)的api: onmousedown, onmousemove, onmouseup

其次要支持用戶傳入放置這個(gè)組件的dom元素和完成的回調(diào)事件。

最終如何使用?

我們先來看下使用方式,再來決定我們怎么編寫這個(gè)庫

具體使用就是這樣的,我們還想用戶能通過import等方式使用,所以我們就要支持esMoudule的導(dǎo)入方式。

編寫庫的整體初始框架

(function ({
    // =================代碼塊1=========================================
    var root = (typeof self == 'object' && self.self == self && self) ||
        (typeof global == 'object' && global.global == global && global) ||
        this || {}; 
    var util = {
        extendfunction (target{
            for (var i = 1, len = arguments.length; i < len; i++) {
                for (var prop in arguments[i]) {
                    if (arguments[i].hasOwnProperty(prop)) {
                        target[prop] = arguments[i][prop]
                    }
                }
            }
            return target
        },
        isValidListenerfunction (listener{
            if (typeof listener === 'function') {
                return true
            } else if (listener && typeof listener === 'object') {
                return util.isValidListener(listener.listener)
            } else {
                return false
            }
        },
        addCSSfunction (cssText{
            var style = document.createElement('style'),  //創(chuàng)建一個(gè)style元素
                head = document.head || document.getElementsByTagName('head')[0]; //獲取head元素
            style.type = 'text/css'//這里必須顯示設(shè)置style元素的type屬性為text/css,否則在ie中不起作用
            if (style.styleSheet) { //IE
                var func = function ({
                    try { //防止IE中stylesheet數(shù)量超過限制而發(fā)生錯(cuò)誤
                        style.styleSheet.cssText = cssText;
                    } catch (e) {

                    }
                }
                //如果當(dāng)前styleSheet還不能用,則放到異步中則行
                if (style.styleSheet.disabled) {
                    setTimeout(func, 10);
                } else {
                    func();
                }
            } else { //w3c
                //w3c瀏覽器中只要?jiǎng)?chuàng)建文本節(jié)點(diǎn)插入到style元素中就行了
                var textNode = document.createTextNode(cssText);
                style.appendChild(textNode);
            }
            head.appendChild(style); //把創(chuàng)建的style元素插入到head中
        },
        indexOffunction (array, item{
            if (array.indexOf) {
                return array.indexOf(item);
            } else {
                var result = -1;
                for (var i = 0, len = array.length; i < len; i++) {
                    if (array[i] === item) {
                        result = i;
                        break;
                    }
                }
                return result;
            }
        }
    }
    
    function EventEmitter({
        this._events = {}
    }

    EventEmitter.prototype.on = function (eventName, listener{
        if (!eventName || !listener) return;
        if (!util.isValidListener(listener)) {
            throw new TypeError('listener must be a function');
        }
        var events = this._events;
        var listeners = events[eventName] = events[eventName] || [];
        var listenerIsWrapped = typeof listener === 'object';
        // 不重復(fù)添加事件
        if (util.indexOf(listeners, listener) === -1) {
            listeners.push(listenerIsWrapped ? listener : {
                listener: listener,
                oncefalse
            });
        }
        return this;
    };
    EventEmitter.prototype.once = function (eventName, listener{
        return this.on(eventName, {
            listener: listener,
            oncetrue
        })
    };
    EventEmitter.prototype.off = function (eventName, listener{
        var listeners = this._events[eventName];
        if (!listeners) return;
        var index;
        for (var i = 0, len = listeners.length; i < len; i++) {
            if (listeners[i] && listeners[i].listener === listener) {
                index = i;
                break;
            }
        }
        if (typeof index !== 'undefined') {
            listeners.splice(index, 1null)
        }
        return this;
    };
    EventEmitter.prototype.emit = function (eventName, args{
        var listeners = this._events[eventName];
        if (!listeners) return;
        for (var i = 0; i < listeners.length; i++) {
            var listener = listeners[i];
            if (listener) {
                listener.listener.apply(this, args || []);
                if (listener.once) {
                    this.off(eventName, listener.listener)
                }
            }
        }
        return this;
    };
    
    // =================代碼塊2=========================================
    function SliderTools(options{
        this.options = util.extend({}, this.constructor.defaultOptions, options)
        this.init();
        this.bindEvents();
        this.diffX = 0;
        this.flag = false;//是否拖動(dòng)到最右側(cè)
    }

    SliderTools.defaultOptions = {
        eldocument.body //默認(rèn)放到body里
    };
    
    var proto = SliderTools.prototype = new EventEmitter();//SliderTools繼承emitter
    
    proto.constructor = SliderTools;//修正構(gòu)造器

    proto.init = function ({
        this.createSlider();//創(chuàng)建插件所需要的dom元素
        this.getElements();//獲取創(chuàng)建好的元素
    }
    
   // =================代碼塊3=========================================
    if (typeof exports != 'undefined' && !exports.nodeType) {
        if (typeof module != 'undefined' && !module.nodeType && module.exports) {
            exports = module.exports = SliderTools;
        }
        exports.SliderTools = SliderTools;
    } else {
        root.SliderTools = SliderTools;
    }
}());

代碼塊1是在判斷是在瀏覽器環(huán)境還是nodeJS環(huán)境,方便代碼三后期使用, 代碼塊2聲明了一個(gè)對(duì)象SliderTools,將用戶傳進(jìn)來的option和默認(rèn)的defaultOption進(jìn)行合并

編寫核心函數(shù)1(創(chuàng)建dom和css)

proto.createSlider = function ({
    this.options.el.innerHTML = '<div id="slider"><div class="drag_bg"></div><div class="drag_text" onselectstart="return false;" unselectable="on">拖動(dòng)滑塊驗(yàn)證</div><div class="handler handler_bg"></div></div>';//像指定元素中放置插件的dom元素
    util.addCSS('ul,li {list-style: none;} a {text-decoration: none;} .wrap {width: 300px;height: 350px;text-align: center;margin: 150px auto;}.inner {padding: 15px;} .clearfix {overflow: hidden;_zoom: 1;} .none {display: none;} #slider {position:relative;background-color: #e8e8e8;width: 300px;height: 34px;line-height: 34px;text-align: center;} #slider .handler {position: absolute;top: 0px;left: 0px;width: 40px;height: 32px;border: 1px solid #ccc;cursor: move;}    .handler_bg {background: #fff  url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==") no-repeat center;} .handler_ok_bg {background: #fff    url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDlBRDI3NjVGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDlBRDI3NjRGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWEzMWNhMC1hYmViLTQxNWEtYTEwZS04Y2U5NzRlN2Q4YTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+k+sHwwAAASZJREFUeNpi/P//PwMyKD8uZw+kUoDYEYgloMIvgHg/EM/ptHx0EFk9I8wAoEZ+IDUPiIMY8IN1QJwENOgj3ACo5gNAbMBAHLgAxA4gQ5igAnNJ0MwAVTsX7IKyY7L2UNuJAf+AmAmJ78AEDTBiwGYg5gbifCSxFCZoaBMCy4A4GOjnH0D6DpK4IxNSVIHAfSDOAeLraJrjgJp/AwPbHMhejiQnwYRmUzNQ4VQgDQqXK0ia/0I17wJiPmQNTNBEAgMlQIWiQA2vgWw7QppBekGxsAjIiEUSBNnsBDWEAY9mEFgMMgBk00E0iZtA7AHEctDQ58MRuA6wlLgGFMoMpIG1QFeGwAIxGZo8GUhIysmwQGSAZgwHaEZhICIzOaBkJkqyM0CAAQDGx279Jf50AAAAAABJRU5ErkJggg==")    no-repeat center;}#slider .drag_bg {background-color: #7ac23c;    height: 34px;width: 0px;} #slider .drag_text {position: absolute;    top: 0px;width: 300px;-moz-user-select: none;-webkit-user-select: none;user-select: none;-o-user-select: none;-ms-user-select: none;    }.unselect {-moz-user-select: none;-webkit-user-select: none;    -ms-user-select: none;}.slide_ok {color: #fff;}')//像頁面里add新的樣式
}
proto.getElements = function ({
    this.slider = document.querySelector('#slider');
    this.drag_bg = document.querySelector('.drag_bg');
    this.handler = document.querySelector('.handler');
}

編寫核心函數(shù)2(綁定事件)

proto.bindEvents = function ({
    var self = this;
    self.handler.onmousedown = function (e{
        self.diffX = e.clientX - self.handler.offsetLeft;
        util.setClassName(self.slider, 'unselect'); //禁止選擇樣式
        document.onmousemove = function (e{
            let deltaX = e.clientX - self.diffX;
            if (deltaX >= self.slider.offsetWidth - self.handler.offsetWidth) { //拖動(dòng)到了最右側(cè)
                deltaX = self.slider.offsetWidth - self.handler.offsetWidth;
                self.flag = true;
            } else if (deltaX <= 0) {
                deltaX = 0;
                self.flag = false;
            } else {
                self.flag = false;
            }
            util.setInlineStyle([self.handler], 'left', deltaX + 'px');
            util.setInlineStyle([self.drag_bg], 'width', deltaX + 'px');
        }
        document.onmouseup = function (e{
            util.setClassName(self.slider, '')
            if (self.flag) {
                util.setClassName(self.slider, 'slide_ok'//拖動(dòng)完成后的樣式
                util.addClass(self.handler, 'handler_ok_bg')////拖動(dòng)完成后的樣式
                self.handler.onmousedown = null //防止拖動(dòng)完成后再次拖動(dòng)
                self.emit('complete')//emit通知使用者的回調(diào)事件
            } else {
                util.setInlineStyle([self.handler], 'left'0 + 'px');
                util.setInlineStyle([self.drag_bg], 'width'0 + 'px');
            }
            document.onmousemove = null;
            document.onmouseup = null;
        }
    }
}

添加工具方法(核心函數(shù)2中用到的)

var util = {
    // ...初始框架里的那部分
    setClassName(selector, className) {
        selector.className = className;
    },
    addClass(selector, className) {
        selector.classList.add(className);
    },
    setInlineStyle(selector, attr, content) {
        let length = selector.length;
        for (let i = 0; i < length; i++) {
            selector[i].style[attr] = content;
        }
    },
}

最終完整可運(yùn)行代碼

(function ({
    var root = (typeof self == 'object' && self.self == self && self) ||
        (typeof global == 'object' && global.global == global && global) ||
        this || {};
    var util = {
        extendfunction (target{
            for (var i = 1, len = arguments.length; i < len; i++) {
                for (var prop in arguments[i]) {
                    if (arguments[i].hasOwnProperty(prop)) {
                        target[prop] = arguments[i][prop]
                    }
                }
            }
            return target
        },
        setClassName(selector, className) {
            selector.className = className;
        },
        addClass(selector, className) {
            selector.classList.add(className);
        },
        setInlineStyle(selector, attr, content) {
            let length = selector.length;
            for (let i = 0; i < length; i++) {
                selector[i].style[attr] = content;
            }
        },
        isValidListenerfunction (listener{
            if (typeof listener === 'function') {
                return true
            } else if (listener && typeof listener === 'object') {
                return util.isValidListener(listener.listener)
            } else {
                return false
            }
        },
        addCSSfunction (cssText{
            var style = document.createElement('style'),  //創(chuàng)建一個(gè)style元素
                head = document.head || document.getElementsByTagName('head')[0]; //獲取head元素
            style.type = 'text/css'//這里必須顯示設(shè)置style元素的type屬性為text/css,否則在ie中不起作用
            if (style.styleSheet) { //IE
                var func = function ({
                    try { //防止IE中stylesheet數(shù)量超過限制而發(fā)生錯(cuò)誤
                        style.styleSheet.cssText = cssText;
                    } catch (e) {

                    }
                }
                //如果當(dāng)前styleSheet還不能用,則放到異步中則行
                if (style.styleSheet.disabled) {
                    setTimeout(func, 10);
                } else {
                    func();
                }
            } else { //w3c
                //w3c瀏覽器中只要?jiǎng)?chuàng)建文本節(jié)點(diǎn)插入到style元素中就行了
                var textNode = document.createTextNode(cssText);
                style.appendChild(textNode);
            }
            head.appendChild(style); //把創(chuàng)建的style元素插入到head中
        },
        indexOffunction (array, item{
            if (array.indexOf) {
                return array.indexOf(item);
            } else {
                var result = -1;
                for (var i = 0, len = array.length; i < len; i++) {
                    if (array[i] === item) {
                        result = i;
                        break;
                    }
                }
                return result;
            }
        }
    }

    function EventEmitter({
        this._events = {}
    }

    EventEmitter.prototype.on = function (eventName, listener{
        if (!eventName || !listener) return;

        if (!util.isValidListener(listener)) {
            throw new TypeError('listener must be a function');
        }

        var events = this._events;
        var listeners = events[eventName] = events[eventName] || [];
        var listenerIsWrapped = typeof listener === 'object';

        // 不重復(fù)添加事件
        if (util.indexOf(listeners, listener) === -1) {
            listeners.push(listenerIsWrapped ? listener : {
                listener: listener,
                oncefalse
            });
        }

        return this;
    };
    EventEmitter.prototype.once = function (eventName, listener{
        return this.on(eventName, {
            listener: listener,
            oncetrue
        })
    };
    EventEmitter.prototype.off = function (eventName, listener{
        var listeners = this._events[eventName];
        if (!listeners) return;

        var index;
        for (var i = 0, len = listeners.length; i < len; i++) {
            if (listeners[i] && listeners[i].listener === listener) {
                index = i;
                break;
            }
        }

        if (typeof index !== 'undefined') {
            listeners.splice(index, 1null)
        }

        return this;
    };
    EventEmitter.prototype.emit = function (eventName, args{
        var listeners = this._events[eventName];
        if (!listeners) return;

        for (var i = 0; i < listeners.length; i++) {
            var listener = listeners[i];
            if (listener) {
                listener.listener.apply(this, args || []);
                if (listener.once) {
                    this.off(eventName, listener.listener)
                }
            }
        }
        return this;
    };

    function SliderTools(options{
        this.options = util.extend({}, this.constructor.defaultOptions, options)
        this.init();
        this.bindEvents();
        this.diffX = 0;
        this.flag = false;
    }

    SliderTools.VERSION = '1.0.0';

    SliderTools.defaultOptions = {
        eldocument.body
    };

    var proto = SliderTools.prototype = new EventEmitter();

    proto.constructor = SliderTools;

    proto.init = function ({
        this.createSlider();
        this.getElements();
    }

    proto.createSlider = function ({
        this.options.el.innerHTML = '<div id="slider"><div class="drag_bg"></div><div class="drag_text" onselectstart="return false;" unselectable="on">拖動(dòng)滑塊驗(yàn)證</div><div class="handler handler_bg"></div></div>';
        util.addCSS('ul, li {    list-style: none;    }    a {    text-decoration: none;    }    .wrap {    width: 300px;    height: 350px;    text-align: center;    margin: 150px auto;    }    .inner {    padding: 15px;    }    .clearfix {    overflow: hidden;    _zoom: 1;    }    .none {    display: none;    }    #slider {    position: relative;    background-color: #e8e8e8;    width: 300px;    height: 34px;    line-height: 34px;    text-align: center;    }    #slider .handler {    position: absolute;    top: 0px;    left: 0px;    width: 40px;    height: 32px;    border: 1px solid #ccc;    cursor: move;}    .handler_bg {    background: #fff    url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==")    no-repeat center;    }    .handler_ok_bg {    background: #fff    url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDlBRDI3NjVGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDlBRDI3NjRGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWEzMWNhMC1hYmViLTQxNWEtYTEwZS04Y2U5NzRlN2Q4YTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+k+sHwwAAASZJREFUeNpi/P//PwMyKD8uZw+kUoDYEYgloMIvgHg/EM/ptHx0EFk9I8wAoEZ+IDUPiIMY8IN1QJwENOgj3ACo5gNAbMBAHLgAxA4gQ5igAnNJ0MwAVTsX7IKyY7L2UNuJAf+AmAmJ78AEDTBiwGYg5gbifCSxFCZoaBMCy4A4GOjnH0D6DpK4IxNSVIHAfSDOAeLraJrjgJp/AwPbHMhejiQnwYRmUzNQ4VQgDQqXK0ia/0I17wJiPmQNTNBEAgMlQIWiQA2vgWw7QppBekGxsAjIiEUSBNnsBDWEAY9mEFgMMgBk00E0iZtA7AHEctDQ58MRuA6wlLgGFMoMpIG1QFeGwAIxGZo8GUhIysmwQGSAZgwHaEZhICIzOaBkJkqyM0CAAQDGx279Jf50AAAAAABJRU5ErkJggg==")    no-repeat center;    }    #slider .drag_bg {    background-color: #7ac23c;    height: 34px;    width: 0px;       }    #slider .drag_text {    position: absolute;    top: 0px;    width: 300px;    -moz-user-select: none;    -webkit-user-select: none;    user-select: none;    -o-user-select: none;    -ms-user-select: none;    }    .unselect {    -moz-user-select: none;    -webkit-user-select: none;    -ms-user-select: none;    }    .slide_ok {    color: #fff;    }')
    }
    proto.getElements = function ({
        this.slider = document.querySelector('#slider');
        this.drag_bg = document.querySelector('.drag_bg');
        this.handler = document.querySelector('.handler');
    }
    proto.bindEvents = function ({
        var self = this;
        self.handler.onmousedown = function (e{
            self.diffX = e.clientX - self.handler.offsetLeft;
            util.setClassName(self.slider, 'unselect');
            document.onmousemove = function (e{
                let deltaX = e.clientX - self.diffX;
                if (deltaX >= self.slider.offsetWidth - self.handler.offsetWidth) {
                    deltaX = self.slider.offsetWidth - self.handler.offsetWidth;
                    self.flag = true;
                } else if (deltaX <= 0) {
                    deltaX = 0;
                    self.flag = false;
                } else {
                    self.flag = false;
                }
                util.setInlineStyle([self.handler], 'left', deltaX + 'px');
                util.setInlineStyle([self.drag_bg], 'width', deltaX + 'px');
            }
            document.onmouseup = function (e{
                util.setClassName(self.slider, '')
                if (self.flag) {
                    util.setClassName(self.slider, 'slide_ok')
                    util.addClass(self.handler, 'handler_ok_bg')
                    self.handler.onmousedown = null
                    self.emit('complete')
                } else {
                    util.setInlineStyle([self.handler], 'left'0 + 'px');
                    util.setInlineStyle([self.drag_bg], 'width'0 + 'px');
                }
                document.onmousemove = null;
                document.onmouseup = null;
            }
        }
    }
    if (typeof exports != 'undefined' && !exports.nodeType) {
        if (typeof module != 'undefined' && !module.nodeType && module.exports) {
            exports = module.exports = SliderTools;
        }
        exports.SliderTools = SliderTools;
    } else {
        root.SliderTools = SliderTools;
    }
}());

let slider = new SliderTools();
slider.on('complete',() => {
    alert('驗(yàn)證完成');
})

??后記

如果你喜歡探討技術(shù),或者對(duì)本文有任何的意見或建議,非常歡迎加魚頭微信好友一起探討,當(dāng)然,魚頭也非常希望能跟你一起聊生活,聊愛好,談天說地。魚頭的微信號(hào)是:krisChans95 也可以掃碼關(guān)注公眾號(hào),訂閱更多精彩內(nèi)容。公眾號(hào)窗口回復(fù)『 前端資料 』,即可獲取約 200M 前端面試資料,不要錯(cuò)過。



瀏覽 21
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 狠狠操免费| 北京熟妇搡BBBB搡BBBB| 爽爽午国产浪潮AV性色www| 亚洲欧美在线观看| 欧美性猛交XXXX乱大交3| 91av免费在线观看| 日韩欧美在线一区| 国产精品AV片| 久久加勒比| BBW老熟女BBw| 玖玖99视频| 黄色大片在线| 91av在线观看视频| 大鸡巴视频在线| 久久免费高清视频| 亚洲九九九九| 中文字幕在线观看不卡| A片大香蕉| 亚洲乱伦av| 无码人妻精品一区二区50| 亚洲一级二级| 四虎国产| 国产成人AV在线播放| 成人精品一区二区区别解析| 成人A片在线| 色综合九九| 青青操首页| 日本a在线| 操逼网站大全| 亚洲AV无码| 日韩激情一区| 麻豆一区在线| 国产成人自拍视频在线| 免费操b视频| 中文字幕无码在线观看| 高hnp| 日本爱爱小视频| 99无码人妻| 东方av在线播放| 婷婷亚洲国产| 亚洲精品乱码在线| 亚洲AV无码一区二区三区少妇| 天天狠狠| 91无码在线观看| 性爱福利社| 亚洲高清成人动漫| 熟女人妻ThePorn| 久久色片| 国产一级婬乱片免费| 亚洲欧洲视频在线观看| 少妇性视频| 日韩99| 久久麻豆| 久久视频精品| 九九黄片| 色五月av| 国产精品成人免费久久黄AV片| 国产在线高清| 日韩精品在线视频观看| 一区二区三区福利| 51嘿嘿嘿国产精品伦理| 69视频在线观看免费| 免费中文字幕| 按摩忍不住BD中文字幕| 中文久久| www.sesese| 怡红院av| 图片区视频区小说区| 欧美色图另类| 欧美成人版| 波多野结衣高清无码视频| 综合婷婷久久| 制服无码| 亚洲精品美女| 成人网站无码| 一级a看片在线观看| 特级西西西88大胆无码| 久久久久久大香蕉| 亚洲成年人在线| 亚洲色婷婷在线| 欧美日韩国产在线| 日韩av小说| 91在线无码视频| 成人欧美一区二区三区白人| 国产叼嘿视频| 欧美亚洲成人精品| 99re欧美激情| 靠比免费| 国产精品无毛五区六区| 日韩性爱视频| 狼人综合网| 亚洲成人免费视频| 欧美激情一区二区| 欧美一区二区在线| 中文字幕有码视频| 自拍偷拍综合| 高hnp| 五月天丁香社区| 一区二区三区电影高清电影免费观看 | 免费看欧美成人A片无码| 国产欧美日韩在线观看| 免费A片国产毛无码A片| 在线你懂| 东方av在线观看| 亚洲综合免费观看| 91精品国产综合久久久蜜臀酒店| 欧美成人小视频| 江苏妇搡BBBB搡BBBB| 老熟女痒到不行-ThePorn| 成人电影91| 中文字幕亚洲日韩| 波多野结衣av无码| 天天爱夜夜操| 国产激情在线视频| 久久久大香蕉| 日韩人妻无码专区一区二区| 翔田千里与黑人50分钟| 国产色婷婷一区二区| 丁香五香天堂| 91久久久久久久91| 一区二区小视频| 在线看毛片网站| 黄色国产在线| 日韩性爱一区| 另类老妇性BBwBBw图片| 东方av在| 人妻av中文字幕| 色色色色五月天| 中文无码日韩欧美久久| 26∪u∪成人网站| 丰满少妇在线观看网站| 国产精品成人免费精品自在线观看 | 91亚洲精品国产成人| 国产探花一区二区三区| 99精品视频免费在线观看| 翔田千里无码A片| 俺来俺去www色官网| 一级二级三级视频| 日韩欧美精品18| 欧美丰满美乳XXⅩ高潮www| 国产精品成人影视| 精品av| 2014天堂网| 免费无码高清视频| 久操免费视频| 成人AV免费| 欧美日韩四区| 国产精品偷拍视频| av天堂中文| 日韩逼逼| 五月丁香激情婷婷| 免费人成网站| 人人艹人人干| 人妻av在线| 99国产在线观看| 婷婷久久综合| 中国一级黄色A片| 福利大香蕉| 欧美一级高清片免费一级a| 蜜桃91精品| 韩日在线视频| 欧美成人超碰| 最近中文字幕mv第三季歌词| 日韩五码| 亚洲AV无码乱码精品| 国产欧美综合视频一区二区在线 | 日本人妻在线观看| 嫩草久久| 欧美国产日本| 国产精品永久免费| 免费v片| 青青五月天| 操b在线免费观看| 三须三级久久三级久久18| 国产成人中文字幕| aaa片| 97人妻精品一区二区三区视频| 99久久99九九99九九九| 国产精品婷婷| 99re视频播放| 久久久视频6r| 国产小电影在线观看| 五月天乱伦小说| 国产在线无码视频| 亚洲性爱在线观看| 在线综合国产欧美| WWW亚洲视频| 久久国产精品99久久人人澡| 一级A片免费| 91香蕉麻豆| 97成人视频| 无码av无码AV| 天天操大香蕉| 激情国产AV| 懂色av懂色av粉嫩av无码| 中文字幕视频在线播放| 大香蕉久草| 秋霞精品一区二区三区| 婷婷少妇激情| 美女免费AV| 在线毛片网站| 国产人成一区二区三区影院| 国产福利视频| 精品无码一区二区三区四区五区| 国产在线看| 牛牛精品一区二区| 北条麻妃人妻中文无码| 欧美肏屄视频| 国产一区在线播放| 麻豆传媒免费观看| 日韩V| 中文字幕在线观看免费高清完整版在线观看| www.日韩| 东方AV免费在线观看| 九色PORNY丨自拍蝌蚪| 豆花AV在线| 91人妻人人爽人人爽| 亚洲AV在线观看| 成人资源站| sm国产在线调教视频| 成年人免费电影| 国产午夜在线| 久久夜色精品噜噜亚洲AV| 2025天天干| 丁香色婷婷| 国产无码在线影院| 成人在线无码视频| 北条麻妃人妻中文字幕91影视| 天天爽| 最近中文字幕高清2019中文字幕| 欧美黄频| 国产视频在线免费观看| 亚洲精品97久久中文字幕| 一道本在线| 国产黄色直播| 囯产精品久久久| 精品av| 日韩一级黄片| 西西人体444www| 少妇婷婷| 免费草逼视频| 农村新婚夜一级A片| 亚洲加勒比久久88色综合| 免费观看黄色视频网站| 中文字幕第83页| 国产精品乱码毛片在线人与| P站免费版-永久免费的福利视频平台| 久久国产99| 欧美日韩国产一区| 尤物视频网站在线观看| 99国产精品久久久久久久成人| 三级片在线网站| 久久青青| 好好的日视频| 久在线视频| 东京热一区二区| 狼人综合影院| 欧美成人视频网| 欧美老逼| 青吴乐大香蕉| 成人午夜无码| 91操B| 综合欧美国产视频二区| 蜜臀久久精品久久久久| 2025AV天堂网| 俺来也操逼| 午夜操逼逼| 在线中文字幕AV| 日本免费一区二区三区| 亚洲va欧美ⅴa在线| 囯产精品久久久久久久久免费无码 | 精品国产一区二区三区性色AV| 少妇搡BBBB搡BBB搡毛片少妇| 欧美A区| 日韩gay| 免费人成在线观看视频播放| 久久精品一区二区三区蜜芽的特点| 97人妻精品| 亚洲AV无码成人精品区www| 亚洲精品中文字幕在线观看| 日日撸| 三级成人AV| 久草新视频| 黄片av| 97人妻精品一区二区三区软件| 大香蕉久操视频| 亚洲香蕉视频| 91一级片| 天天日天天干天天干| 在线综合国产欧美| 久本草精品| 亚洲综合图区| 亚洲国产av一区| 成人免费视频网| 国内自拍偷拍| 色v在线| 三级网站免费观看| 亚洲视频中文字幕| 欧美一区免费| 超碰777| 久久精品操| 日韩三级AV| 91香蕉视频18| 人妻18无码人伦一区二区三区精品| 天天射网| 青娱乐偷窥成| 91无码人妻一区二区成人aⅴ| 久热无码| 精品国产AV色一区二区深夜久久 | 亚洲色婷婷五月天| 国产女18毛片多18精品| 国产做受| 一本色道久久综合狠狠躁的推荐| 99热精品免费在线观看| 东方av在线播放| 大香蕉伊人在线观看| 亚洲jiZZjiZZ日本少妇| 美女肏| 欧美色视频网| 在线观看国产小视频| 亚洲资源站| 成人福利视频在线| 啪啪视频免费观看| 亚洲国产成人无码| 一级黄色片免费| 欧美成人精品| 国产草莓视频| 亚洲第一福利视频| 欧美99视频| 亚洲精品无码久久久| 久久婷婷婷| 国产一级黄| 淫乱人妻| 中文字幕日本无码| 久久精品一区二区三区四区五区| 欧美国产精品一区二区三区| 在线观看国产黄色| 黄片网站入口| 日皮视频免费在线观看| 日韩三级一区二区| 成人激情在线视频| 黄片91| 日韩人妻AV| 火淫玖玖免费精品| a一级黄片| a在线观看| 婷婷丁香色五月| 大鸡巴导航| 亚洲第一黄色视频| 天天干天天干天天日| AV老鸭窝| 欧美日韩精品久久久免费观看| 五月天婷婷小说| 99热99在线| 中文字幕无码精品| 国产区AV| 色老板在线精品免费观看| 99久在线精品99re8| 国色天香一区二区| 91吴梦梦一区二区传媒| 制服毛片| 99热在线观看免费精品| 亚洲免费精品视频| 一区二区无码高清| 亚洲性生活| 在线无码中文| 天堂在线视频免费| 黑人狂躁女人高潮视频| 天天爽天天| 天堂久草| 伊人综合色| 黄色直播在线观看| 五月丁香视频在线| 精品国产一区二区三区久久久蜜月 | 17c白丝喷水自慰| 无码精品ThePorn| 操逼视频一级| 免费黄色电影在线观看| 国产午夜激情视频| 俺去也| 中国免费XXXX18| 日韩人妻无码一区二区三区中文| 伊人精品A片一区二区三区| 国产剧情一区二区av在线观看 | 狠狠撸在线视频| 日韩不卡av| 成人精品三级AV在线看| 国产成人视频免费在线观看| 嫩草视频在线观看| 黃色一級片黃色一級片尖叫声-百度-百 | 最新国产第一页| 一级免费A片| 久久久人妻无码精品蜜桃| 日本中文字幕在线播放| 91香蕉视频在线看| 欧美群交在线| 99国产一区| 超碰在线观看97| 亚洲三级毛片| 永井玛丽亚av无码中出流出| 欧美在线视频一区| 久久伊人在线| A片视频免费看| 女邻居的B好大| 成人久久电影| 国产香蕉91| 免费看欧美日黄片| 在线免费看黄色视频| AAA级片| 天天操一操| 天天操人人操| 嫩草视频在线观看| 久久无码一区二区| 大香蕉免费中文| 亚洲无码专区在线观看| 少妇成人网| 欧一美一婬一伦一区二区三区自慰| 中文字幕视频免费| 国产高清AV| 色哟哟无码| 俺也去射| 在线观看的av| 青娱乐网站| 一区二区在线不卡| 亚洲中文字幕免费视频| 日韩日逼网站| 国产久久久久久| 欧美熟妇BBB搡BBB| 999精品视频在线| 99精品丰满人妻无码| 国产91在线拍揄自揄拍无码九色| 人人干人人爽| 亚洲精选一区二区三区| 北条麻纪视频| 久操中文| 亚洲人免费视频| 91麻豆视频| 成全在线观看高清的| 欧美日韩一级黄色片| 蜜桃av秘无码一区二区三区| 日韩无码免费电影| 日韩黄色免费视频| 99涩涩| 成人永久免费视频| 一纹A片免费观看| 人人操人人摸人人爱| 亚洲精品无码中文| 久久精品在线视频| 奇米88888| 曰韩一级A片| 国产又爽又黄免费网站校园里| 五月天久久久久| 99日韩无码| 久草视频福利| 91丨九色丨老熟女探花| 国产一级a毛一级a毛片视频黑人| 中文字幕人成人乱码亚洲电影| a视频免费看| 国产操逼网站| 91在线无精精品秘白丝| 变态另类av| 午夜福利不卡视频| 人妻二区| 国产精品久久久久无码AV| 在线不卡免费Av| 一本高清无码| 老司机精品| 国产激情免费| 福利导航网| 日韩精品一区在线| 亚洲激情偷拍| 三级网址在线观看| 久激情内射婷内射蜜桃欧美一级 | 日本黄A三级三级三级| 国产在线欧美在线| 免费无码毛片| 国产无遮挡又黄又爽又色视频| 安徽妇搡BBBB搡BBBB,另类老妇 | 牛牛精品视频一区二区| 欧美日韩中文字幕在线| 91在线永久| 国产在线观看97| 91拍真实国产伦偷精品| 二区三区免费视频| 日韩黄色激情| 亚洲无码天堂| 色天天综合网| 另类老妇奶性BBWBBwBBw| 国产美女操逼网站| 免费一级a片| 久久午夜一级A片| 亚洲综合中文字幕在线播放| 99热免费| 久久久偷拍| 亚洲第一无码| 高清无码一区二区在线| 免费看操逼| 亚洲一级AV| 操日本女人逼| 超碰在线日韩| 99热国产精品| 天天插天天狠天天透| 免费成人视频在线观看| 日韩黄色A级片| 永久免费一区二区三区| 东方a在线| 懂色av蜜臀av粉嫩av分| 欧美成人黄色小视频| 无码AV网站| 久久久久久久成人| 高清无码在线免费视频| 久久久久久久毛片| 成人在线免费视频观看| 婷婷三级片| 国产无码高清在线观看| 日本黄在线播放| 99视频免费| 久草手机视频| 91在线永久| 久久久久久无码精品亚洲日韩麻豆| 99性爱视频| 黄色一级片免费看| 香蕉视频一区| 99热精品免费| 密臀福利导航| 国产XXXX| 五月天啪啪| 大香蕉色伊人| 人人爽人人操人人爱| 天天操免费| 91在线无码| 亚洲无码成人视频| www.亚洲视频| 国产Av资源| 国产欧美在线不卡| 国产一区二区无码| 久操人妻| 一级爱爱爱| 在线观看中文字幕网站| 成人伦理聚合| 亚洲av免费| 91人妻人人澡人人| 亚洲第一视频在线观看| 69成人| 91麻豆国产福利精品| 亚洲一级黄色电影| 久久男人天堂| 最近中文字幕在线中文字幕7| 国产香蕉视频在线播放| 按摩性高湖婬AAA片A片中国| 黄网站在线观看| 四虎成人网站| 欧美激情爱爱| 大香蕉黄色片| 国产欧美另类| 大香煮伊在75| 69天堂| 操批视频| 欧美国产日本| 日日射天天干| 成人大香蕉视频| 噜噜噜噜射| 洞av| 欧美三P囗交做爰| 狠狠撸狠狠操| 久久只有精品| 91人妻人人澡人人爽人人玩| 996热re视频精品视频这里 | 亚洲精品无码视频| 伊人成人电影| 色天天综合网| 99久久99久久久精品棕色圆| 在线观看日韩欧美| 久久免费毛片| r四虎18| 92午夜福利天堂视频2019| 欧美激情一区二区三区| 草久视频| 又大又黄又爽| 亚洲精品一二| 亚洲日逼网| 日韩AⅤ无码一区二区三区| 91色色网| 久久成人免费视频| 久操AV| 影音先锋日韩| 成人片无码| 欧美二区三区| 日本老女人视频| 操逼网123首页| 亚洲欧洲在线播放| 国产人妻一区二区三区欧美毛片| 亚洲欧美成人在线| 99自拍视频| 亚洲小说区图片区| 中文字幕在线网址| 成人久久久久一级大黄毛片中国| 久热国产在线| 99re这里只有精品6| 欧美日韩亚洲一区二区三区| 午夜成人小视频| 久久狠| 日本色综合| 99色| 日本黄色中文字幕| 91精品国产三级| 特级西西人体WWWWW| 日日射天天干| 婷婷午夜福利| 国产秘精品区二区三区日本| 噜噜噜AV| 国产亚洲综合无码| 91成人免费电影片| 久久肏屄视频| 伊人大香蕉视频| 久久久亚洲无码| 三级网站在线播放| 亚洲v天堂| 国产精彩视频| 一级无码视频| 亚洲成人影音| 亚洲精品中文字幕成人片| 国产成人精品一区二区三区视频| 日韩精品中文无码| 亚洲无码理论片| 香蕉国产精品| 噜噜噜噜射| 亚洲欧美国产另类| 精品国产免费观看久久久_久久天天| 91人人操| 精品在线播放| 亚洲操| 精品国产91乱码一区二区三区| 亚洲第一av| 良妇露脸15P| av自拍| 蜜臀精品| 91网站免费看| 日韩毛片中文字幕| 超碰97在线免费观看| av天堂无码| 亚洲乱码中文字幕| 日韩AV成人电影| 国产视频激情| 国产在线观看91| 中文字幕亚洲视频在线观看| 中文字幕va| 久久成人无码电影| 蜜桃传媒一区二区亚洲A| 青娱乐精品在线视频| 北条麻妃91视频| 国产免费AV在线观看| 天堂国产一区二区三区| av无码av天天av天天爽| 少妇性受XXXX黑人XYX性爽| 欧美熟妇擦BBBB擦BBBB| 三级片AAAA| 91三级片在线播放| 国产超级无码高清在线视频观看| 国产免费AV片在线无码| 久久久久99| 伊人99在线| 友田真希一级婬片A片| 好看的中文字幕av| 51成人精品午夜福利| 91一级A片在线观看| 久久久久久久久久久久成人| 中文字幕资源在线| 国产精品色情A级毛片| 成人高清在线| 一卡二卡三卡无码| av黄色网址| 成人精品一区日本无码网站suv/ | 91人人妻人人澡人人爽人人精品| 伊人大香蕉网站| 国产A∨| 国产精品久久久大香蕉| www.欧美视频| 久热9| 亚洲无码图片| 青娱乐91视频| 欧美午夜黄片| 蜜臀久久99精品久久久兰草影视| 黄色无码电影| 蜜桃Av噜噜一区二区三| 日本少妇网站| 爱爱黄色视频| 99色热| 精品一区在线| 久久av电影| 亚洲V| 91人妻人人澡人人爽人人精品| av干在线| 色中文| 国产,亚洲91| 久久精品无码一区二区无码性色| 婷婷日韩在线| 欧美偷拍一区| 东京热久久综合| 曰曰摸日日碰| 午夜福利大香蕉| 一级片视频在线观看| 亚洲视频免费完整版在线播放| 91成人一区二区三区| 熟妇人妻中文字幕无码老熟妇| 91人妻无码一区二区三区| 被黑人猛躁4O次高潮| 欧美成人图片视频在线| 国产丝袜AV| 久久久久国产精品视频| 久久免费毛片| 狠狠干2024| 国产老骚逼| 欧美成人怡红院| 五月中文字幕| 欧美一区视频| 五月天黄色网| 日韩精品在线视频| 国色天香一区二区| 日韩成人无码特集| 热re99久久精品国产99热| 欧美精品不卡| 91爱在线| 五月天成人网址| 日韩熟妇无码中文字幕| 欧美三级片网址| 影音先锋亚洲无码| 日韩一级一片内射视频4K| 亚洲福利天堂| 日本视频在线免费| 国产又爽又黄视频在线看| 尿在小sao货里面好不好| 国产美女高潮视频| 免费无码婬片AAAA片直播| 亚洲免费在线视频观看| 中文字幕乱码亚洲无线码在线日噜噜| 精品网站999www| 亚洲aV影院| 玖热精品| 精品一区三区| 人人鲁人人操| 国产精品在线观看视频| 日韩在线综合| 黄色电影免费在线观看| a级黄色视频免费观看| 国产婷婷内射| 亚洲日本三级| 91超碰人人| 不卡视频一区二区| 今天成全在线观看高清| 婷婷丁香六月| www.怡春院| 亚洲黄色视频在线免费观看| 亚洲精品久久久久毛片A级牛奶| 日韩动态图| 日韩天天| 91逼站| 午夜成人爽| 91视频18| 蜜芽成人精品久久久视频| 操逼操| 日本免费在线视频| 蜜桃视频网站在线观看| 国产毛片毛片毛片| 色先锋资源站| 五月婷婷俺來也| 操b视频在线观看| 免费观看黄片网站| 亚洲操逼视频| 久久久久电影| 亚洲色a| 亚洲九九| 成人做爰黄AA片免费看三区| 亚洲3p| 91最新在线播放| 91人人妻人人澡人人爽| 精品成人影视| 亚洲无码电影视频| 在线观看者亚洲| AV无码免费| 日韩另类| 欧美日韩一级视频| 蜜臀久久久99久久久久久久| 欧美www| 午夜高清无码视频| 亚洲欧洲无码视频| 久久亚洲国产| 色色三区| 日本熟女视频| 中文字幕视频在线播放| 免费无码蜜臀在线观看| 熟女影音先锋| 亚洲AV无码成人网站国产网站| 无码人妻一区二区三区| 久肏| 波多在线视频| 91蝌蚪视频在线播放| 午夜亚洲视频| 乱伦综合| 欧美怡春院| 中文字幕国产视频| 91在线无码精品秘入口男同| 欧美一级黃色A片免费看蜜桃熟了 一级a一级a免费观看免免黄‘/ | 四房婷婷| 亚洲性爱网址| 福利视频一区二区三区| 国产日韩一区二区三免费高清| 黄色777| 天天日夜夜| 欧美污网站| 91干干| 成人国产片| 五月丁香六月| 午夜福利三级| 亚洲一区亚洲二区| 北条麻妃视频| 亚洲性爱网址| 免费无码在线播放| 久久伊人在| 日日撸视频| 四川乱子伦95视频国产| 麻豆传媒一区二区| 日韩精品中文无码| 亚洲欧洲久久| 婷婷开心色四房播播免费| 人妻无码精品| 国产Av一区二区三区| 十八禁视频在线观看网站.www| 欧美熟妇另类久久久久久不卡 | 国产91视频在线观看| 在线免费高清无码| 日本不卡一区| 日本黄色电影网址| 91人妻无码一区二区久久| 偷拍一区二区三区| 日韩无码精品电影| 国产a视频| 日韩极品视频在线| 亚洲字幕av| 国产三级网| 黄色电影免费网站| 欧美另类极品| 尤物在线| 樱桃AV| 免看一级a一片| 人人看人人爱| 不卡二区| 色婷婷亚洲色| 99re66| 17c.白丝喷水自慰| 激情性爱婷婷色五月| 一本之道高清数码大全| 国产一区二区三区在线视频| 日逼视频免费看| 久久精品无码一区二区无码性色| 天天夜夜操| 免费成人毛片| 国产免费激情视频| 久草久热| 影音先锋日韩资源| 日韩字幕| 成人黄A片免费| 一区二区三区成人电影| 偷偷撸在线| 夜夜爽7777精品国产三级| 免费欧美性爱视频| 蜜桃黄片AV在线观看| 国产av综合网| 成人国产精品在线看| 就去se超碰| 在线播放高清无码| 亚洲成人性爱网站| 国产高清av| 先锋影音AV资源站| 亚洲乱伦中文字幕| 亚洲小视频| 午夜欧美性爱视频| 免费视频二区| 91亚洲精品久久久久蜜桃| 中文无码高清视频| 99热在线免费| 一级A片视频免费看| 一插菊花综合视频| 91在线超碰| 99久久精品一区二区成人| 精品动漫3D一区二区三区免费版 | 婷婷亚洲国产| 安徽妇搡BBBB搡BBBB| 不迷路福利视频| 五月天天| 国产一区二区三区无码| 狠狠狠久久久| 亚洲字幕av| 影音先锋三级| 久久久久99| 亚洲无码在线视频播放| 日本不卡视频| 国产精品1区2区3区| 国产精视频| 欧美精品在线免费|