久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

原生JS封裝拖動(dòng)驗(yàn)證滑塊的實(shí)現(xiàn)代碼示例

瀏覽:123日期:2024-05-06 08:22:19

前言

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

最終效果

原生JS封裝拖動(dòng)驗(yàn)證滑塊的實(shí)現(xiàn)代碼示例

分析

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

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

最終如何使用?

我們先來看下使用方式,再來決定我們?cè)趺淳帉戇@個(gè)庫

原生JS封裝拖動(dòng)驗(yàn)證滑塊的實(shí)現(xiàn)代碼示例

具體使用就是這樣的,我們還想用戶能通過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 = { extend: function (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 }, isValidListener: function (listener) { if (typeof listener === ’function’) { return true } else if (listener && typeof listener === ’object’) { return util.isValidListener(listener.listener) } else { return false } }, addCSS: function (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中 }, indexOf: function (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, once: false }); } return this; }; EventEmitter.prototype.once = function (eventName, listener) { return this.on(eventName, { listener: listener, once: true }) }; 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, 1, null) } 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 = { el: document.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 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 = { extend: function (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; } }, isValidListener: function (listener) { if (typeof listener === ’function’) { return true } else if (listener && typeof listener === ’object’) { return util.isValidListener(listener.listener) } else { return false } }, addCSS: function (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中 }, indexOf: function (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, once: false }); } return this; }; EventEmitter.prototype.once = function (eventName, listener) { return this.on(eventName, { listener: listener, once: true }) }; 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, 1, null) } 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 = { el: document.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 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)證完成’);})

結(jié)語

參考資料

到此這篇關(guān)于原生JS封裝拖動(dòng)驗(yàn)證滑塊的實(shí)現(xiàn)代碼示例的文章就介紹到這了,更多相關(guān)JS 拖動(dòng)驗(yàn)證滑塊內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 最近最新中文字幕 | h视频在线观看免费 | 亚洲日本精品视频 | 成人综合区| 久久青草av | 精品久久久久久久 | 黄色毛片在线观看 | 欧美久久久久 | 中文字幕一区在线观看视频 | 国产 欧美 日韩 一区 | 欧美在线一区二区 | 特级毛片www| www.久久.com | 国产精品久久国产精品 | 日韩性色视频 | 亚洲一区二区三区在线播放 | 特级毛片在线大全免费播放 | 久久久www成人免费精品 | 国产人成精品一区二区三 | 日韩视频国产 | 国产精品久久久久久久久大全 | 美女张开腿视频网站免费 | 免费看的av| 亚洲国产精品网站 | xxxx网| 夜久久 | 欧美一区永久视频免费观看 | 成人av一区二区三区 | 欧美日韩高清 | 免费观看一级毛片 | 91在线免费看| 成人欧美一区二区三区在线播放 | 亚洲不卡视频在线 | 欧美精品一区二区在线观看 | 亚洲欧美一级 | 男人久久天堂 | 国产精品自拍一区 | 国内在线一区 | 日韩一区二区影视 | 一区免费 | 天堂一区二区三区 | 国产精品极品美女在线观看免费 | 欧洲毛片 | 成人免费激情视频 | 国产三级在线 | 亚洲va欧美va天堂v国产综合 | 日韩精品一区二区三区四区视频 | 国产999精品久久久久 | 免费黄色网止 | 91亚洲国产成人久久精品网站 | 国产视频一区二区 | 日韩精品一区二区三区中文字幕 | 亚洲欧美日韩另类精品一区二区三区 | 精品久久久久久久久久久久 | 爱爱网av| 国产精品99久久免费观看 | 日韩靠逼 | 欧美视频区 | 国产一区二区三区色淫影院 | www.亚洲成人网 | 亚洲人成中文字幕在线观看 | 久热最新| 天堂一区二区三区在线 | 国内精品在线视频 | 亚洲欧美第一页 | 天天干天天操天天舔 | 国产区日韩区欧美区 | 天天插天天干 | 成人午夜在线视频 | 黄色一级大片在线免费看产 | www久久久久久久 | 午夜视频 | 国产精品久久国产精麻豆99网站 | 91精品综合久久久久久五月天 | 日韩成人精品在线观看 | 日韩免费网站 | 久久久久国产 | 毛片com| 欧美一级片在线观看 | 国产日韩欧美在线 | 亚洲精品乱码久久久久久久 | 国产免费视频 | 人人草人人干 | 欧美精品国产精品 | 亚洲av毛片一级二级在线 | 亚洲成人免费网站 | 欧美一区久久 | 久久人体视频 | 日韩成人在线一区 | 国产高清一区二区三区 | 日韩在线观看中文字幕 | 国产在线一区二区 | 久久久夜夜夜 | 国产精品福利在线观看 | 午夜久久视频 | 中文在线a在线 | 欧美日韩一区二区三区在线电影 | 男人的天堂在线视频 | 久久国产经典视频 | 亚洲激情视频在线播放 | 日本一区二区三区四区 | 最新日韩精品在线观看 | 欧美乱码久久久久久蜜桃 | 蜜桃视频一区 | 91久久综合亚洲鲁鲁五月天 | 日韩欧美一二三区 | 亚洲日日操 | 国产成人精品一区二区三区四区 | 日本欧美在线观看 | 久久婷婷视频 | 中文字幕免费在线观看视频 | 日韩成人在线网站 | 99国产精品久久久久久久 | 欧洲成人午夜免费大片 | 一区二区av| 久久91 | 热久久这里只有精品 | 久久精品中文字幕 | 在线只有精品 | 国产精品亲子伦av一区二区三区 | 免费看男女www网站入口在线 | 国产女人爽到高潮免费视频 | 欧美一区二区三区视频在线观看 | 在线成人国产 | 日本黄色短片 | 久久久精品456亚洲影院 | 日韩一区在线视频 | 国产视频91在线 | 亚洲www啪成人一区二区 | 午夜成人在线视频 | 日韩av一区二区三区在线观看 | 欧美日韩国产在线观看 | 特级理论片 | 亚洲国内精品 | 国产欧美综合一区二区三区 | 成人av入口 | 欧美福利影院 | 亚洲男人的天堂在线 | 欧美中文在线 | 男女羞羞视频在线免费观看 | 日韩精品在线观看免费 | а√天堂中文在线资源8 | 欧美日韩久久精品 | 羞羞视频在线观看视频 | 日本久久久久久久 | 久久久久国产一区二区三区 | 五月婷婷丁香在线 | 青青草网 | 天天干天天操 | 国产农村妇女精品 | 成人精品在线 | 成人精品久久 | 特级丰满少妇一级aaaa爱毛片 | 亚洲国产精品久久久 | 久久久久综合狠狠综合日本高清 | 黄色小视频在线观看 | 国产视频一区二区 | 999精品一区| 久久国产精品视频一区 | 日韩精品一区二区三区 | 亚洲免费av在线 | 亚洲欧美综合乱码精品成人网 | 久久精品系列 | 伊人久操 | 国产成人自拍一区 | 亚洲国产精品自拍 | 国产传媒在线 | 极品女神高潮呻吟av久久 | 日韩欧美在线观看视频网站 | 一级片av| 91精品免费在线观看 | 国产精品成人在线观看 | 久久久精品一区 | 久久这里只有精品首页 | 国产视频9999 | 日韩专区中文字幕 | 久久久久久久久久国产 | 日韩av在线一区二区三区 | 国精产品一区一区三区免费完 | 亚洲九九 | 亚洲最大免费视频 | 精品视频一区二区三区四区 | 日韩欧美在线观看视频 | 日韩成人在线播放 | 蜜桃在线视频 | 成人精品电影 | 黄色高清视频在线观看 | 亚州综合| 国产精品国产精品国产专区不卡 | 女人毛片 | 亚洲日韩中文字幕一区 | 日韩欧美一区二区三区免费观看 | 久久精品日 | 国产77777 | 久久久久女人精品毛片九一韩国 | 国产精品人人做人人爽 | 国产高清自拍 | 成人午夜精品 | 久久无码精品一区二区三区 | 玖草av| 亚洲精品久久久久久久久久久久久 | 日本不卡精品 | 成人精品久久 | 久久精品99国产精品日本 | 久久精品这里热有精品 | 真人一级毛片 | 99精品欧美一区二区三区 | 亚洲国产精品久久久久久 | 日韩在线不卡 | 欧美三级影院 | 国产情侣免费视频 | 亚洲第一色片 | 国产日韩精品在线 | 日韩精品一区二区三区中文在线 | 国产激情亚洲 | 中文字幕亚洲一区 | 超碰在线91| 91网在线播放 | 久久精品| 国产成人99久久亚洲综合精品 | 日韩视频在线一区 | 天天干天天操 | 亚洲综合色网 | 香蕉成人啪国产精品视频综合网 | 久久久久久久国产 | 蜜桃αv| www.亚洲 | 欧美国产91 | 亚洲日韩欧美一区二区在线 | av在线播放网址 | 91在线观看网站 | 国产一级淫免费播放m | 亚洲一级毛片 | 日韩一区二区三区在线 | 91精品国产乱码久久久久久久久 | 日韩一区二区在线观看视频 | 日韩99| 精品国产一区二区三区性色av | 五月婷婷激情 | 国产成人精品免高潮在线观看 | 波多野结衣一区在线观看 | 亚洲精品在线免费观看视频 | 在线视频国产一区 | 日韩在线你懂的 | 97国产超碰 | 久久极品 | 亚洲视频 欧美视频 | 99热在线精品播放 | 欧美日韩91| 久久久精品网站 | 亚洲精品久久久久999中文字幕 | 中文字幕在线观看1 | 日韩欧美成人影院 | 在线免费观看黄 | 精品国产一区二区三区在线观看 | 求av网址| 午夜小视频在线观看 | 在线亚洲一区 | 日韩综合网 | 日日干夜夜干 | 国产精品三级视频 | 国产欧美日韩一区 | 久在线视频 | 欧美bbbxxx| 国产一区二区三区在线免费观看 | 国产一区在线看 | 99re| 午夜精品一区二区三区在线观看 | 一区二区三区四区国产 | 成人精品一区二区三区 | 国产日韩欧美视频 | 6080亚洲精品一区二区 | 99伊人| 精品久久久久久久久久久久 | 免费国产网站 | 黄视频网址 | 91精品国产91久久久久久吃药 | 精品96久久久久久中文字幕无 | www.一区 | 欧美福利网 | a欧美| 在线视频第一页 | 亚洲综合国产 | 日本福利视频免费观看 | 欧美日韩在线看 | 国产xxxx成人精品免费视频频 | 欧美日在线 | 无码国模国产在线观看 | 啪一啪 | 欧美成人精品一区二区男人看 | 玖草av| 精品久久久久久久久久久久久久 | 久久久久久国产视频 | 亚洲精品在线免费 | 日韩综合一区 | 岛国av免费 | 久久久久久亚洲 | 黄色精品视频 | 国产视频第一页 | 中文字幕精品一区久久久久 | а天堂中文最新一区二区三区 | 神马久久久久久 | 成年人网站国产 | 暖暖日本在线视频 | 欧美日韩国产在线 | 精品在线一区 | 曰批视频在线观看 | 91xxx在线观看| 午夜电影av| 久久亚洲一区二区三区四区 | 欧美成年黄网站色视频 | 精品久久久久久久久久久 | 欧美色综合| 欧美日韩国产一区二区三区 | 呦呦在线观看 | 亚洲精品wwww | 欧美一区2区三区4区公司二百 | 精品久久久久久亚洲精品 | 羞羞在线观看视频免费观看hd | 欧美一级网站 | 久久亚洲精品裙底抄底 | 亚洲女人天堂网 | 三级av网站 | 中文字幕日韩一区二区不卡 | youjizz欧美 | 在线观看中文字幕亚洲 | 日日躁夜夜操 | 国产猛男猛女超爽免费视频网站 | 99re视频| 欧美久久一区二区 | 国产精品视频久久久 | 久久女人网 | 国产欧美日韩综合精品 | 久久久久久久一区 | 中文字幕亚洲在线观看 | 欧美精品1区2区3区 精品国产欧美一区二区 | 国产免费高清 | 久久99久 | 九色精品 | 久久一区| 成人欧美一区二区三区 | 中文字幕亚洲欧美日韩在线不卡 | 天天干狠狠操 | av永久免费| 久久91精品国产91久久跳 | 免费观看电视在线高清视频 | 在线观看免费av网 | 亚洲第一免费网站 | 91精品国产自产精品男人的天堂 | 欧美日韩一区二区三区在线观看 | 国产免费观看一区二区三区 | 国偷自产av一区二区三区 | 综合久久亚洲 | 精品成人 | 成人毛片在线视频 | 国产精品久久国产愉拍 | 亚洲精品国偷拍自产在线观看 | 国产韩国精品一区二区三区 | 97国产精品视频 | 亚洲福利av | 搞黄免费视频 | 久久久久成人精品 | 亚洲视频在线观看视频 | 二区三区在线观看 | 色先锋av资源中文字幕 | 成人免费一区二区三区视频网站 | 成人在线国产 | 免费黄色片在线观看 | 日韩三级网 | 三区影院 | 国产精品久久国产精品 | 国产三级视频 | 国产中文 | 亚洲精彩视频 | 一区自拍 | 欧美色爽 | 色婷婷国产精品综合在线观看 | 亚洲综合视频在线观看 | 亚洲蜜臀av乱码久久精品蜜桃 | 婷婷综合激情 | 精品国产不卡一区二区三区 | 欧美日韩一区二区三区在线电影 | 狠狠干狠狠干 | 国产精品久久久99 | 在线看一级片 | 欧美日韩一区二区三区在线观看 | 国产精品久久久久久久久久免费 | 在线观看视频一区二区 | 精品成人在线 | 99国产精品久久久久久久久久 | 欧美日韩国产精品 | 国产视频久久久 | 欧美激情在线免费观看 | 欧美日韩一区二区三区免费视频 | 久久国产精品视频观看 | 中文字幕av亚洲精品一部二部 | 久久另类ts人妖一区二区 | 久久久精品一区 | 最新国产福利在线 | 欧美一区在线看 | 亚洲久草在线 | 亚洲午夜精品一区二区三区他趣 | 欧美精品一区二区三区一线天视频 | 免费毛片视频 | 一区二区精品视频 | 欧美日韩精品一区二区三区蜜桃 | 国产一区二区影院 | 欧美一区二区三区视频 | 亚洲乱码国产乱码精品精98午夜 | 久久久精品欧美 | 久久九九这里只有精品 | 久久高清片 | 成人亚洲精品久久久久 | 亚洲国产精品久久久 | 久久精品黄 | 久久久久久久久中文字幕 | 999精品视频 | 国产一区二区电影 | 91社区在线高清 | 国产精品欧美一区二区 | av一区二区三区在线观看 | 91看片网 | 少妇看av一二三区 | 久久久久久精 | 99国产精品久久久久久久 | 欧美日韩一级视频 | 91视频网| 欧美精品xx | 天天舔日日干 | 久久久久一区二区三区 | 激情的网站 | 九九99久久 | 亚洲看片 | 久久网一区二区三区 | 成人深夜福利在线观看 | 男女视频一区二区 | 日本一二三视频 | 国产精品久久久久久中文字 | 伊人网在线免费观看 | 精品免费视频 | 日韩欧美在线中文字幕 | 成人黄色在线观看 | 日本成人福利视频 | 亚洲久久在线 | 国内精品久久久久久中文字幕 | www.操操操| 久久99精品视频 | 日韩高清在线 | 亚洲成人三级 | 久久这里只有国产精品 | 久久久久久久久久久久福利 | 国产在线一区二区 | 国产精品永久久久久久久久久 | 天堂视频在线 | 国产剧情一区二区三区 | 成人黄色在线观看 | 精品一区二区三区免费 | 久久久国产一区二区三区 | 久久午夜视频 | 色婷婷久久 | 日韩三级网 | 久久久久久久国产精品 | 亚洲综合在线视频 | 欧美亚洲一区二区三区 | 一区二区久久 | 在线观看精品视频网站 | 国产在线观看av | 91在线观看视频 | 国产精品视频免费 | 99re6热只有精品免费观看 | 97国产一区二区 | 色吊丝在线永久观看最新版本 | 国产精品日本一区二区在线播放 | 国产成人精品一区二区在线 | 盗摄精品av一区二区三区 | 在线观看91 | 福利视频网站 | 亚洲国产精品成人 | 欧美在线视频一区 | 一级毛片免费网站 | 黄网站涩免费蜜桃网站 | 欧美日韩专区 | 在线不卡视频 | 国产激情视频 | 91.成人天堂一区 | 毛片免费观看 | 一区二区三区日本 | 亚洲国产高清高潮精品美女 | 国产精品视频一二三 | 欧美性一区二区三区 | 欧美日韩一区二区三区不卡视频 | 亚洲综合视频 | 国产成人av在线播放 | 欧美在线观看一区 | 国产精品二区三区 | 精品国产乱码一区二区三区 | 国产精品免费久久 | 国产精品久久久久久久久小说 | 久久精品视 | 精品久久久久香蕉网 | 欧美精品一区二区三区在线 | 亚洲欧美高清 | 久久亚洲国产精品 | www.在线播放 | 国产精品极品美女在线观看免费 | www.国产高清| 亚洲欧美中文日韩v在线观看 | 亚洲国产欧美一区二区三区久久 | 国产精品亚洲成人 | 国产精品伊人 | 黄色免费在线观看网址 | 一区二区三区国产 | 国产一区二精品区在线 | 欧美高清成人 | 在线观看国产精品一区 | 国产成人在线视频 | 精品久久久一区二区 | 日本一区二区三区在线视频 | 男女做爰高清无遮挡免费视频 | 久久国产一区二区 | 亚洲国产精品99久久久久久久久 | 五月婷婷激情 | 四虎影院在线看 | 免费大片在线观看网站 | 国产欧美综合一区 | 亚洲精品电影网在线观看 | 欧美八区| 性色在线 | 欧美日本精品 | 国产一区二区三区色淫影院 | 久久综合狠狠综合久久综合88 | 中文字幕一区二区三 | 精品亚洲一区二区 | 国产一区二区三区四 | 国产激情综合五月久久 | 91亚洲国产亚洲国产 | 999精品免费 | 91社区在线高清 | av在线毛片 | 欧美日一区 | 久久91| 国产超碰人人爽人人做人人爱 | 国产欧美日韩一区 | 国外成人在线视频网站 | 在线观看成人av | 在线小视频 | 欧美一区二区 | 黄色一级片黄色一级片 | 在线观看欧美一区二区三区 | 天天爽夜夜爽夜夜爽精品视频 | 日本午夜视频 | 欧美黄色网 | 亚洲成人毛片 | 在线日韩视频 | 欧美日韩免费一区二区三区 | 国产午夜精品久久 | 国产在线二区 | 国产毛片毛片 | 国产精品免费观看 | 国精产品一区二区三区黑人免费看 | 久久亚洲国产精品日日av夜夜 | 日韩国产欧美视频 | 中文字幕在线免费视频 | 国产97在线 | 亚洲 | 国产激情一区二区三区 | 国产精品美女久久久久久免费 | 午夜久久乐 | 在线草 | 欧美一区二区三区电影 | 免费啪啪网站 | 国产精品毛片无码 | 999在线观看精品免费不卡网站 | 国产资源视频在线观看 | 黄色片在线免费观看 | 一级毛片免费高清 | 中文字幕国产视频 | av影院在线观看 | 国产成人在线免费观看 | 亚洲午夜电影 | 国产一区二区三区四区在线观看 | 99久久99久久久精品色圆 | 国产免费一区二区三区四区五区 | 国产一区二区三区在线免费观看 | 日韩五码在线 | 国产成人精品午夜视频' | 成人欧美| 91精品国产色综合久久不卡98口 | 午夜精品影院 | 日韩美女av在线 | 亚洲综合大片69999 | 在线一区| 欧美高清一区 | 精品91久久久 | 精品国产乱码久久久久久闺蜜 | 美女一区 | 狠狠综合久久av一区二区小说 | 小情侣高清国产在线播放 | 亚洲自拍偷拍欧美 | 午夜在线视频免费观看 | 91精品国产91久久久久久久久久久久 | 日韩成人在线播放 | 中文字幕亚洲在线 | 亚洲日韩中文字幕一区 | 亚洲视频精品一区 | 日韩精品免费在线视频 | 成人免费淫片aa视频免费 | av黄色在线 | 久草视| 亚洲一区二区福利 | 国产二区三区 | 色婷婷综合久久久中文字幕 | 国产精品不卡 | 日韩在线视频播放 | 成人在线国产 | 日韩精品一区二区在线观看 |