精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

這些JS工具函數(shù)夠你用到2020年底了

開發(fā) 開發(fā)工具
本篇給大家介紹JS工具函數(shù),希望對(duì)你有所幫助。活不多說(shuō),自己平時(shí)搜集的干貨函數(shù)奉上。

[[356182]]

 前言

活不多說(shuō),自己平時(shí)搜集的干貨函數(shù)奉上。

干貨函數(shù)

找出數(shù)字在數(shù)組中下一個(gè)相鄰的元素

  1. let i = ""
  2. let rr = []; 
  3.  
  4. const name = (n, arr1)=>{ 
  5.     let num = Number(n); 
  6.     for (let i = 0; i < arr1.length; i++) { 
  7.         const element = arr1[i]; 
  8.         if (element != num) { 
  9.             rr.push(num--); 
  10.         } 
  11.     } 
  12.     return rr.find((el) => { 
  13.         let newel = String(el); 
  14.         return arr1.includes(newel); 
  15.     })} 
  16.  
  17. let arr = ["2""4""6""8""10""12""14""16""18""20""22""24""27""30""33""36""42""48""54""60"
  18. console.log(name('5',arr)); //4 

格式化時(shí)間

  1. /** 
  2.  * @param {number} time 
  3.  * @param {string} option 
  4.  * @returns {string} 
  5.  */ 
  6. function formatTime(timeoption) { 
  7.   if (('' + time).length === 10) { 
  8.     time = parseInt(time) * 1000 
  9.   } else { 
  10.     time = +time 
  11.   } 
  12.   const d = new Date(time
  13.   const now = Date.now() 
  14.  
  15.   const diff = (now - d) / 1000 
  16.  
  17.   if (diff < 30) { 
  18.     return '剛剛' 
  19.   } else if (diff < 3600) { 
  20.     // less 1 hour 
  21.     return Math.ceil(diff / 60) + '分鐘前' 
  22.   } else if (diff < 3600 * 24) { 
  23.     return Math.ceil(diff / 3600) + '小時(shí)前' 
  24.   } else if (diff < 3600 * 24 * 2) { 
  25.     return '1天前' 
  26.   } 
  27.   if (option) { 
  28.     return parseTime(timeoption
  29.   } else { 
  30.     return ( 
  31.       d.getMonth() + 
  32.       1 + 
  33.       '月' + 
  34.       d.getDate() + 
  35.       '日' + 
  36.       d.getHours() + 
  37.       '時(shí)' + 
  38.       d.getMinutes() + 
  39.       '分' 
  40.     ) 
  41.   } 

解析時(shí)間

  1. /** 
  2.  * Parse the time to string 
  3.  * @param {(Object|string|number)} time 
  4.  * @param {string} cFormat 
  5.  * @returns {string | null
  6.  */ 
  7. function parseTime(time, cFormat) { 
  8.   if (arguments.length === 0 || !time) { 
  9.     return null 
  10.   } 
  11.   const format = cFormat || '{y}-{m}-eskyuaq {h}:{i}:{s}' 
  12.   let date 
  13.   if (typeof time === 'object') { 
  14.     date = time 
  15.   } else { 
  16.     if ((typeof time === 'string')) { 
  17.       if ((/^[0-9]+$/.test(time))) { 
  18.         // support "1548221490638" 
  19.         time = parseInt(time
  20.       } else { 
  21.         // support safari 
  22.         // https://stackoverflow.com/questions/4310953/invalid-date-in-safari 
  23.         time = time.replace(new RegExp(/-/gm), '/'
  24.       } 
  25.     } 
  26.  
  27.     if ((typeof time === 'number') && (time.toString().length === 10)) { 
  28.       time = time * 1000 
  29.     } 
  30.     date = new Date(time
  31.   } 
  32.   const formatObj = { 
  33.     y: date.getFullYear(), 
  34.     m: date.getMonth() + 1, 
  35.     d: date.getDate(), 
  36.     h: date.getHours(), 
  37.     i: date.getMinutes(), 
  38.     s: date.getSeconds(), 
  39.     a: date.getDay() 
  40.   } 
  41.   const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { 
  42.     const value = formatObj[key
  43.     // Note: getDay() returns 0 on Sunday 
  44.     if (key === 'a') { return ['日''一''二''三''四''五''六'][value ] } 
  45.     return value.toString().padStart(2, '0'
  46.   }) 
  47.   return time_str 

解析Url地址

  1. /** 
  2.  * @param {string} url 
  3.  * @returns {Object} 
  4.  */ 
  5. function param2Obj(url) { 
  6.   const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' '
  7.   if (!search) { 
  8.     return {} 
  9.   } 
  10.   const obj = {} 
  11.   const searchArr = search.split('&'
  12.   searchArr.forEach(v => { 
  13.     const index = v.indexOf('='
  14.     if (index !== -1) { 
  15.       const name = v.substring(0, index
  16.       const val = v.substring(index + 1, v.length) 
  17.       obj[name] = val 
  18.     } 
  19.   }) 
  20.   return obj 

合并兩個(gè)對(duì)象

  1. /** 
  2.  * Merges two objects, giving the last one precedence 
  3.  * @param {Object} target 
  4.  * @param {(Object|Array)} source 
  5.  * @returns {Object} 
  6.  */ 
  7. function objectMerge(target, source) { 
  8.   if (typeof target !== 'object') { 
  9.     target = {} 
  10.   } 
  11.   if (Array.isArray(source)) { 
  12.     return source.slice() 
  13.   } 
  14.   Object.keys(source).forEach(property => { 
  15.     const sourceProperty = source[property] 
  16.     if (typeof sourceProperty === 'object') { 
  17.       target[property] = objectMerge(target[property], sourceProperty) 
  18.     } else { 
  19.       target[property] = sourceProperty 
  20.     } 
  21.   }) 
  22.   return target 

數(shù)組去重

  1. /** 
  2.  * @param {Array} arr 
  3.  * @returns {Array} 
  4.  */ 
  5. function uniqueArr(arr) { 
  6.   return Array.from(new Set(arr)) 

防抖

  1. /** 
  2.  * @param {Function} func 
  3.  * @param {number} wait 
  4.  * @param {boolean} immediate 
  5.  * @return {*} 
  6.  */ 
  7. function debounce(func, wait, immediate) { 
  8.   let timeout, args, context, timestamp, result 
  9.  
  10.   const later = function() { 
  11.     // 據(jù)上一次觸發(fā)時(shí)間間隔 
  12.     const last = +new Date() - timestamp 
  13.  
  14.     // 上次被包裝函數(shù)被調(diào)用時(shí)間間隔 last 小于設(shè)定時(shí)間間隔 wait 
  15.     if (last < wait && last > 0) { 
  16.       timeout = setTimeout(later, wait - last
  17.     } else { 
  18.       timeout = null 
  19.       // 如果設(shè)定為immediate===true,因?yàn)殚_始邊界已經(jīng)調(diào)用過(guò)了此處無(wú)需調(diào)用 
  20.       if (!immediate) { 
  21.         result = func.apply(context, args) 
  22.         if (!timeout) context = args = null 
  23.       } 
  24.     } 
  25.   } 
  26.  
  27.   return function(...args) { 
  28.     context = this 
  29.     timestamp = +new Date() 
  30.     const callNow = immediate && !timeout 
  31.     // 如果延時(shí)不存在,重新設(shè)定延時(shí) 
  32.     if (!timeout) timeout = setTimeout(later, wait) 
  33.     if (callNow) { 
  34.       result = func.apply(context, args) 
  35.       context = args = null 
  36.     } 
  37.  
  38.     return result 
  39.   } 

簡(jiǎn)易搜索

  1. <!DOCTYPE html> 
  2. <html lang="en"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0"
  6.   <title>Document</title> 
  7. </head> 
  8. <body> 
  9.   <input type="text" id="int"
  10. </body> 
  11. <script> 
  12.   let list = ["示例1","示例12","示例5","示例56"]; 
  13.   document.querySelector('#int').onchange=function(e){ 
  14.     console.log(search(e.target.value)); 
  15.   } 
  16.    
  17.   function search(val) { 
  18.     if (val) { 
  19.         return list.filter(function (item) { 
  20.           return Object.keys(item).some(function (key) { 
  21.             return String(item[key]).toLowerCase().indexOf(val) > -1 
  22.           }) 
  23.         }) 
  24.     } 
  25.     return list  
  26.   } 
  27.  
  28. </script> 
  29. </html> 

將秒化為時(shí)分秒

  1. function formateSeconds (endTime) { 
  2.       let secondTime = parseInt(endTime); //將傳入的秒的值轉(zhuǎn)化為Number 
  3.       let min = 0; // 初始化分 
  4.       let h = 0; // 初始化小時(shí) 
  5.       let result = ""
  6.       if (secondTime > 60) { 
  7.         //如果秒數(shù)大于60,將秒數(shù)轉(zhuǎn)換成整數(shù) 
  8.         min = parseInt(secondTime / 60); //獲取分鐘,除以60取整數(shù),得到整數(shù)分鐘 
  9.         secondTime = parseInt(secondTime % 60); //獲取秒數(shù),秒數(shù)取佘,得到整數(shù)秒數(shù) 
  10.         if (min > 60) { 
  11.           //如果分鐘大于60,將分鐘轉(zhuǎn)換成小時(shí) 
  12.           h = parseInt(min / 60); //獲取小時(shí),獲取分鐘除以60,得到整數(shù)小時(shí) 
  13.           min = parseInt(min % 60); //獲取小時(shí)后取佘的分,獲取分鐘除以60取佘的分 
  14.         } 
  15.       } 
  16.       result = `${h.toString().padStart(2, "0")}:${min.toString().padStart(2, "0")}:${secondTime.toString().padStart(2, "0")}`; 
  17.       return result; 
  18.     } 
  19.      
  20. 將時(shí)分秒化為秒 

將時(shí)分秒化為秒

  1. function formSeconds (times) { 
  2.         let arr = times.split(":"); 
  3.         let s = arr[2]; 
  4.         let m = arr[1]; 
  5.         let h = arr[0]; 
  6.         let m1 = m<10?m.replace(/\b(0+)/gi,""):m; 
  7.         let h1 = h<10?h.replace(/\b(0+)/gi,""):h; 
  8.         return m1*60+Number(h1)+Number(s) 

對(duì)象深層遍歷

  1. var obj = { 
  2.   a:{ 
  3.    b:{ 
  4.     c:"maomin" 
  5.    } 
  6.   } 
  7.  } 
  8. const safeGet = (obj, path) => { 
  9.         try { 
  10.           return path.split('.').reduce((o, k) => o[k], obj) 
  11.         } catch (e) { 
  12.           return undefined 
  13.         } 
  14.     } 
  15. console.log(safeGet(obj,'a.b.c'));// maomin 

帶有分割符的字符串轉(zhuǎn)化成一個(gè)n維數(shù)組

  1.  var str = "A-2-12"
  2.  var str1 = str.split('-'); 
  3.  var arr = str1.reverse().reduce((pre,cur,i) => { 
  4.  if(i==0) 
  5.   { pre.push(cur) 
  6.    return pre 
  7.  } 
  8.   return [cur,pre] 
  9. },[]) 
  10. console.log(arr) // ["A"["B",["C"]]] 

獲取時(shí)間戳

  1. function thedata(d){ 
  2.      return d.replace(/\-/g, "\/"
  3.  } 
  4.  var serverTime = parseInt(new Date(thedata('2020-08-12 15:52:11')).valueOf()); 
  5.  console.log(serverTime); // 1597218731000,獲取到時(shí)間戳 

對(duì)象深拷貝

  1. function deepClone(target) { 
  2.     // 定義一個(gè)變量 
  3.     let result; 
  4.     // 如果當(dāng)前需要深拷貝的是一個(gè)對(duì)象的話 
  5.     if (typeof target === 'object') { 
  6.     // 如果是一個(gè)數(shù)組的話 
  7.         if (Array.isArray(target)) { 
  8.             result = []; // 將result賦值為一個(gè)數(shù)組,并且執(zhí)行遍歷 
  9.             for (let i in target) { 
  10.                 // 遞歸克隆數(shù)組中的每一項(xiàng) 
  11.                 result.push(deepClone(target[i])) 
  12.             } 
  13.          // 判斷如果當(dāng)前的值是null的話;直接賦值為null 
  14.         } else if(target===null) { 
  15.             result = null
  16.          // 判斷如果當(dāng)前的值是一個(gè)RegExp對(duì)象的話,直接賦值     
  17.         } else if(target.constructor===RegExp){ 
  18.             result = target; 
  19.         }else { 
  20.          // 否則是普通對(duì)象,直接for in循環(huán),遞歸賦值對(duì)象的所有值 
  21.             result = {}; 
  22.             for (let i in target) { 
  23.                 result[i] = deepClone(target[i]); 
  24.             } 
  25.         } 
  26.      // 如果不是對(duì)象的話,就是基本數(shù)據(jù)類型,那么直接賦值 
  27.     } else { 
  28.         result = target; 
  29.     } 
  30.      // 返回最終結(jié)果 
  31.     return result; 

簡(jiǎn)易版對(duì)象拷貝

  1.  function copy(obj) { 
  2.     if(typeof obj == "object") { //判斷是否復(fù)雜類型 
  3.        var result = obj.constructor == Array ? [] : {};//判斷數(shù)組類型或是object,數(shù)組即result=[],object即result={} 
  4.         for(let i in obj) { 
  5.             result[i] = typeof obj[i] == "object" ? copy(obj[i]) : obj[i]//判斷數(shù)據(jù)每一項(xiàng)是否是object 
  6.         } 
  7.     } else { 
  8.         var result = obj //基本類型直接拷貝 
  9.     } 
  10.   return result; 

實(shí)現(xiàn)一個(gè)模板引擎

  1. function render(template, data) { 
  2.   const reg = /\{\{(\w+)\}\}/; // 模板字符串正則 
  3.   if (reg.test(template)) { // 判斷模板里是否有模板字符串 
  4.     const name = reg.exec(template)[1]; // 查找當(dāng)前模板里第一個(gè)模板字符串的字段 
  5.     template = template.replace(reg, data[name]); // 將第一個(gè)模板字符串渲染 
  6.     return render(template, data); // 遞歸的渲染并返回渲染后的結(jié)構(gòu) 
  7.   } 
  8.   return template; // 如果模板沒(méi)有模板字符串直接返回 
  9. let template = '我是{{name}},年齡{{age}},性別{{sex}}'
  10. let data = { 
  11.   name'姓名'
  12.   age: 18 
  13. render(template, data); // 我是姓名,年齡18,性別undefined 

節(jié)流

  1. // ①定時(shí)器實(shí)現(xiàn) 
  2. const throttle = (fn,delay = 500) =>{ 
  3.   let flag = true
  4.   return (...args) => { 
  5.     if(!flag) return
  6.     flag = false
  7.     setTimeout(() => { 
  8.       fn.apply(this,args); 
  9.       flag = true
  10.     },delay); 
  11.   }; 
  12. // ②時(shí)間戳實(shí)現(xiàn) 
  13. const throttle = (fn,delay = 500) => { 
  14.   let preTime = Date.now(); 
  15.   return (...args) => { 
  16.     const nowTime = Date.now(); 
  17.     if(nowTime - preTime >= delay){ 
  18.        preTime = Date.now(); 
  19.        fn.apply(this,args); 
  20.     } 
  21.   } 

封裝fetch

  1. /** 
  2.  * 封裝fetch函數(shù),用Promise做回調(diào) 
  3.  * @type {{get: (function(*=)), post: (function(*=, *=))}} 
  4.  */ 
  5. const fetchUtil = { 
  6.     get: (url) => { 
  7.         return new Promise((resolve, reject) => { 
  8.             fetch(url, { 
  9.                 method: 'GET'
  10.                 headers: { 
  11.                     'Content-Type''application/x-www-form-urlencoded'
  12.                 } 
  13.             }).then((response) => response.json()).then(response => { 
  14.                 resolve(response); 
  15.             }).catch(err => { 
  16.                 reject(new Error(err)); 
  17.             }); 
  18.         }); 
  19.     }, 
  20.     post: (url, params) => { 
  21.         return new Promise((resolve, reject) => { 
  22.             fetch(url, { 
  23.                 method: 'POST'
  24.                 headers: { 
  25.                     'Content-Type''application/x-www-form-urlencoded'
  26.                 }, 
  27.                 body: params 
  28.             }).then((response) => response.json()).then(response => { 
  29.                 resolve(response); 
  30.             }).catch(err => { 
  31.                 reject(new Error(err)); 
  32.             }); 
  33.         }); 
  34.     } 
  35. }; 

判斷瀏覽器環(huán)境

  1. function getSystem(){ 
  2.     const mac = /mac/i, 
  3.         linux = /linux/i, 
  4.         win = /win/i; 
  5.     const platform = navigator.platform.toLowerCase(); 
  6.     if(mac.test(platform)){ 
  7.         return 'MAC'
  8.     } else if(win.test(platform)){ 
  9.         return 'WIN'
  10.     } else if(linux.test(platform)){ 
  11.         return 'Linux'
  12.     } 
  13.     return undefined; 
  14. const browser = {  
  15.     versions:function(){  
  16.         let ret = 'xxSys'
  17.         const u = navigator.userAgent; 
  18.         const isMobile = !!u.match(/AppleWebKit.*Mobile.*/), 
  19.             ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), 
  20.             android = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; 
  21.         if(isMobile){ 
  22.             if(ios) return 'IOS'
  23.             if(android) return 'Android'
  24.         } else { 
  25.             ret = getSystem() || ret; 
  26.         } 
  27.         return ret; 
  28.     }(), 
  29. }; 

定義數(shù)組內(nèi)部對(duì)象形式

  1. const objArrtransArr = (olddata, oldval, oldname)=>{ 
  2.     const newArr = []; 
  3.     olddata.forEach(item => { 
  4.         // 定義數(shù)組內(nèi)部對(duì)象形式 
  5.         let obj = {}; 
  6.         obj.value = item[oldval]; 
  7.         obj.name = item[oldname]; 
  8.         // 將對(duì)象數(shù)據(jù)推到數(shù)組中 
  9.         newArr.push(obj); 
  10.     }); 
  11.     return newArr; 

解析html字符串

  1. function (htmlobj) { 
  2.        var el = document.createElement('div'); 
  3.        el.innerHTML = htmlobj; 
  4.        var tags = el.getElementsByTagName('img'); 
  5.        var text = tags[0].getAttribute("src"); 
  6.        return text; 

判斷瀏覽器是否支持?jǐn)z像頭

  1. function videoCheck () { 
  2.       var deviceList = []; 
  3.       navigator.mediaDevices 
  4.         .enumerateDevices() 
  5.         .then(devices => { 
  6.           devices.forEach(device => { 
  7.             deviceList.push(device.kind); 
  8.           }); 
  9.           if (deviceList.indexOf("videoinput") == "-1") { 
  10.             console.info("沒(méi)有攝像頭"); 
  11.             return false
  12.           } else { 
  13.             console.info("有攝像頭"); 
  14.           } 
  15.         }) 
  16.         .catch(function(err) { 
  17.           alert(err.name + ": " + err.message); 
  18.         }); 
  19.     } 

回文算法

  1. //忽略標(biāo)點(diǎn)符號(hào)、大小寫和空格,正著讀和反著讀一模一樣。 
  2. nction made(str) { 
  3.       var str1 = str.toLowerCase(); //先將字符串全部轉(zhuǎn)換為小寫 
  4.       var reg = /[\W\_]/g; // 刪除所有非字母數(shù)字字符和下劃線 
  5.       var str2 = str1.replace(reg, ""); // 去掉非字母和非數(shù)字 
  6.       var str3 = str2.split(""); // 字符串分隔成數(shù)組 
  7.       var str4 = str3.reverse(); // 反轉(zhuǎn)數(shù)組中的元素 
  8.       var str5 = str4.join(""); // 反轉(zhuǎn)后的數(shù)組轉(zhuǎn)化為字符串 
  9.       return str2 === str5; 

持續(xù)更新...

 

責(zé)任編輯:姜華 來(lái)源: 前端歷劫之路
相關(guān)推薦

2021-06-06 16:52:11

工具函數(shù)JS

2016-12-30 13:31:30

大數(shù)據(jù)盤點(diǎn)

2021-04-04 22:42:52

5G北美網(wǎng)絡(luò)

2010-05-10 12:08:53

IP地址

2020-11-09 07:25:20

函數(shù) JavaScript數(shù)據(jù)

2010-05-24 09:07:42

2019-12-03 10:04:18

程序員招聘開發(fā)

2019-12-30 18:28:39

人工智能機(jī)器人微軟

2012-09-18 09:55:33

Intel英特爾CPU

2013-07-23 09:36:36

商用LTE4G

2009-10-26 09:50:46

WiMAX2802.16

2021-03-09 19:44:33

中國(guó)電信5G網(wǎng)絡(luò)

2017-09-28 11:04:10

神器

2021-10-14 11:06:53

物聯(lián)網(wǎng)通信技術(shù)

2012-06-25 09:25:22

惠普裁員

2009-01-12 21:51:07

CCNP證書北漂求職

2019-12-06 10:51:07

EasyStack

2022-02-20 07:37:03

網(wǎng)絡(luò)犯罪加密貨幣黑客攻擊

2020-04-24 09:39:13

網(wǎng)絡(luò)攻擊惡意軟件網(wǎng)絡(luò)安全

2018-07-10 09:36:25

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

水野朝阳av一区二区三区| 二级片在线观看| 黄大色黄女片18免费| 电影一区二区| 亚洲色图视频网站| 成人精品水蜜桃| 久久中文字幕在线观看| 青青视频一区二区| 欧美亚洲一区三区| 一本久道久久综合| 人妻中文字幕一区| 石原莉奈在线亚洲二区| 久久精品久久久久电影| 四季av综合网站| 福利一区二区三区视频在线观看| 亚洲视频一区二区免费在线观看| 激情五月综合色婷婷一区二区| 亚洲熟妇无码乱子av电影| 五月激情综合| 亚洲乱码国产乱码精品精天堂| 我要看一级黄色大片| 精品精品导航| 国产精品午夜在线观看| 国产精品精品软件视频| 中文字幕在线网址| 99热免费精品在线观看| 久久亚洲电影天堂| 午夜在线观看一区| 成人午夜网址| 欧美男同性恋视频网站| 漂亮人妻被中出中文字幕| 18在线观看的| 国产精品第一页第二页第三页| 国产亚洲欧美一区二区| 国产精品久久影视| 蜜桃视频一区二区三区在线观看| 久久久人成影片一区二区三区观看 | 久久国产免费| 久久久久久久影院| 国产a免费视频| 日本一区二区三区视频| 日韩精品极品在线观看播放免费视频| 中文字幕第一页在线视频| 卡通欧美亚洲| 欧美午夜激情视频| 国产尤物av一区二区三区| 国产黄色片在线播放| 99精品国产视频| 国产aⅴ精品一区二区三区黄| 国产又大又黄的视频| 日本免费新一区视频| 日av在线播放中文不卡| 三级黄色在线视频| 99视频精品免费观看| 欧美黑人又粗大| 永久久久久久久| 亚洲人metart人体| 另类图片亚洲另类| 国产高潮流白浆| 欧美jizzhd精品欧美巨大免费| 久久久999精品| 蜜桃av.com| 一区二区三区国产精华| 久久av资源网站| 少妇被躁爽到高潮无码文| 亚洲啊v在线观看| 久久艳片www.17c.com | 欧美日韩精品中文字幕| 色欲色香天天天综合网www| 日本高清成人vr专区| 亚洲综合丝袜美腿| xxxx18hd亚洲hd捆绑| 美女高潮视频在线看| 天天操天天色综合| 国产麻花豆剧传媒精品mv在线| 欧美专区福利免费| 欧美亚洲免费在线一区| 色婷婷一区二区三区av免费看| 一区二区三区无毛| 精品日韩成人av| 91av在线免费| 久久香蕉国产| 欧美激情视频播放| 亚洲精品男人的天堂| 视频一区国产视频| 国产福利精品av综合导导航| 国产孕妇孕交大片孕| 不卡影院免费观看| 色一情一乱一伦一区二区三区丨| 动漫一区在线| 日韩欧美国产成人| 手机在线国产视频| 中国av一区| 久久99精品久久久久久琪琪| 毛片在线免费视频| 国产在线精品一区在线观看麻豆| 国产精选一区二区| 欧美成人hd| 激情成人在线视频| 一级做a免费视频| 日韩mv欧美mv国产网站| 少妇av一区二区三区| 国产网友自拍视频| 美国三级日本三级久久99| 91手机视频在线观看| 中文字幕欧美色图| 国产精品中文字幕日韩精品| 精品久久久三级| 888av在线| 一级精品视频在线观看宜春院 | 国产欧美在线| 国产精品日韩欧美大师| 国产黄频在线观看| 久久午夜色播影院免费高清 | 久久影院一区| 97久久精品国产| 亚洲图片中文字幕| 91丨国产丨九色丨pron| 亚洲AV无码成人精品一区| 俺来也官网欧美久久精品| 日韩欧亚中文在线| 无码人妻丰满熟妇区毛片蜜桃精品| 妖精一区二区三区精品视频| 日韩有码在线观看| 国产精品久久久免费视频| 美国十次了思思久久精品导航| 成人在线观看91| 触手亚洲一区二区三区| 一区二区三区 在线观看视频| 国产高潮免费视频| 理论片一区二区在线| 日韩视频欧美视频| 天堂网视频在线| 国产91精品欧美| 亚洲精品欧美精品| 澳门成人av网| 欧美精品乱码久久久久久| 亚洲人成人无码网www国产| 国模吧视频一区| 成人妇女免费播放久久久| 久草视频视频在线播放| 亚洲国产wwwccc36天堂| 黄色小视频免费网站| 日韩高清一级| 4438全国亚洲精品在线观看视频| 精品久久久久久亚洲综合网站| 欧美激情在线观看视频免费| 日韩精品视频久久| 日本一区福利在线| 欧美激情一区二区三级高清视频| 国产夫妻在线观看| 亚洲色图.com| 国产探花在线看| 日本道不卡免费一区| 国产成人jvid在线播放| 天天色综合久久| 亚洲第一主播视频| 亚洲精品久久一区二区三区777| 66国产精品| 国产日韩精品电影| 午夜激情在线观看| 欧美视频在线播放| 亚洲av熟女国产一区二区性色| 国色天香一区二区| 精品一卡二卡三卡四卡日本乱码 | 国产精品久久久久aaaa| 91在线视频观看免费| 激情综合网五月| 国产精品盗摄久久久| 国产一二三区在线| 日本精品视频一区二区三区| 亚欧精品视频一区二区三区| 免费观看成人av| 在线视频一区观看| 国产精品亚洲欧美一级在线| 久久天堂av综合合色| 精品国产乱码一区二区三 | 日韩一区不卡| 国产精品亚洲综合在线观看| 久热在线中文字幕色999舞| 精品人妻一区二区三区麻豆91| 亚洲免费在线看| 乱码一区二区三区| 国产欧美日韩一级| 欧美大陆一区二区| 国产毛片精品久久| 欧美大胆a视频| 六月婷婷综合网| 亚洲国产婷婷综合在线精品| www.男人天堂| 日韩在线一区二区| 致1999电视剧免费观看策驰影院| 色综合视频一区二区三区日韩| 欧美高清无遮挡| 亚洲av成人精品毛片| 在线免费不卡视频| 久久国产精品国语对白| 99久久99久久免费精品蜜臀| 日本xxxxxxx免费视频| 91精品一区国产高清在线gif | 亚洲一二区视频| 亚洲精品乱码久久久久久黑人| 中文字幕免费在线播放| 奇米一区二区三区av| 成人在线免费观看网址| 老牛精品亚洲成av人片| 国产精品欧美激情在线播放| 丁香花在线影院| 国产一区二区三区视频在线观看| 国产三级第一页| 欧美性色xo影院| jizz亚洲少妇| 久久久久久久av麻豆果冻| 91丨porny丨九色| 日韩中文字幕麻豆| 国产精品igao激情视频| 久久不见久久见中文字幕免费 | 日韩精品成人免费观看视频| 亚洲欧美精品午睡沙发| 久久精品女同亚洲女同13| 激情综合网av| 红桃av在线播放| 综合精品久久| 婷婷精品国产一区二区三区日韩 | 国产日韩高清一区二区三区在线| 色女人综合av| 日韩成人一级| 91麻豆蜜桃| 忘忧草在线日韩www影院| 欧美激情网友自拍| 黄色小网站在线观看| 亚洲欧美日韩天堂| 丰满人妻av一区二区三区| 欧美日韩精品高清| 日韩电影在线观看一区二区| 一本大道综合伊人精品热热| 久久精品国产av一区二区三区| 中文字幕在线视频一区| 性欧美精品中出| 99精品久久免费看蜜臀剧情介绍 | 91视频com| 日本性生活一级片| 狠狠色综合播放一区二区| 色一情一乱一伦一区二区三区日本| 在线欧美视频| 欧美另类videos| 亚洲私拍自拍| 91视频 - 88av| 亚洲深深色噜噜狠狠爱网站| 亚洲v日韩v欧美v综合| 视频国产一区| 久久精品日产第一区二区三区精品版| 91精品啪在线观看国产爱臀| 91欧美激情另类亚洲| 天堂综合在线播放| 91精品久久久久久久久| 欧美成人福利| 国产精品一区二区久久| 亚洲日本免费电影| 国产一区二区在线免费视频| 成人性片免费| 国产欧美一区二区三区在线| 欧美成人高清视频在线观看| 日本不卡高字幕在线2019| 天天综合网天天| 国产精品成人观看视频国产奇米| 日本电影欧美片| 国产精品久久二区| 欧美爱爱视频| 国产精华一区| 日本韩国欧美超级黄在线观看| 久精品国产欧美| 亚洲精品无吗| 视频一区二区三区在线观看| 88国产精品视频一区二区三区| 国产盗摄视频在线观看| 欧美 日韩 国产一区二区在线视频 | 99久热这里只有精品视频免费观看| 国产激情一区二区三区在线观看 | 久久亚洲AV无码| 午夜电影一区二区| 特黄视频免费看| 在线看国产一区二区| 亚洲视频在线观看免费视频| 欧美日韩一区二区三区不卡| www香蕉视频| 日韩精品亚洲视频| 成人动漫在线播放| 久久久久999| www.色在线| 欧美在线性爱视频| 日韩一区二区三区四区五区| 99国产精品久久久久老师| 国产香蕉精品| 亚洲v欧美v另类v综合v日韩v| 激情久久久久久久| 欧美视频第三页| 韩国女主播成人在线观看| 性猛交╳xxx乱大交| 91浏览器在线视频| 中国女人特级毛片| 亚洲成人免费视| 337p粉嫩色噜噜噜大肥臀| 欧美精品丝袜中出| 人妻少妇精品无码专区久久| 中文日韩在线视频| 阿v视频在线| 国产日韩在线看| 超碰成人在线观看| 日韩免费三级| 亚洲手机视频| aaaaa黄色片| 国产日韩欧美不卡| 久久精品久久精品久久| 欧美日韩一区成人| 国内精品国产成人国产三级| 在线成人一区二区| 华人av在线| 亚洲a∨日韩av高清在线观看| 日韩在线黄色| 视频一区二区视频| 免费看欧美美女黄的网站| 亚洲精品国产成人av在线| 久久蜜桃av一区精品变态类天堂| 美国美女黄色片| 精品日韩美女的视频高清| 国产99999| 日韩中文在线中文网在线观看| av资源网在线播放| 3d动漫啪啪精品一区二区免费| 欧美日韩国产免费观看视频| 人人干视频在线| 国产乱淫av一区二区三区| 国产在线免费看| 在线影视一区二区三区| 欧美在线 | 亚洲| 在线看国产精品| av伦理在线| 99国内精品久久久久久久软件| 国产成人一区| 白嫩少妇丰满一区二区| 成人av高清在线| 91插插插插插插| 欧美剧情片在线观看| 免费黄网站在线| 国产精品一区久久久| 在线成人动漫av| 97在线免费公开视频| 成人激情动漫在线观看| 91人妻一区二区三区蜜臀| 欧美日韩在线播| 番号集在线观看| 国产精品成人av在线| 日韩欧美高清在线播放| 久久免费视频在线观看| 超碰在线视屏| 国产免费一区二区三区| 韩国av一区| jizz日本免费| 欧美日韩亚洲视频| 深夜福利在线视频| 2023亚洲男人天堂| 欧美色就是色| 性chinese极品按摩| 国产午夜亚洲精品午夜鲁丝片 | 亚洲综合在线视频| 国产精品久久久久久久久毛片 | 欧美日韩国产在线观看| 在线视频婷婷| 成人免费午夜电影| 午夜久久美女| 亚洲欧美在线不卡| 色综合天天综合色综合av | 国产成人综合网站| 久久久精品国产sm调教| 精品国产一区二区三区不卡| 少妇视频在线观看| 日韩欧美国产二区| 久久电影网站中文字幕| 午夜爽爽爽男女免费观看| 精品久久久网站| 免费看男女www网站入口在线| 欧美日韩精品免费看| 日本中文字幕一区二区视频| 国产精品免费无码| 欧美一区二区在线视频| 蜜臀av在线| 久久亚洲一区二区| 日本成人在线一区| 精品亚洲永久免费| 日韩精品免费一线在线观看| www.久久.com| 国产免费xxx| 国产亚洲1区2区3区| 国产精品自偷自拍| 孩xxxx性bbbb欧美| 日韩一区自拍| 日批在线观看视频| 欧美日韩精品免费| 成人性教育av免费网址|