92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

首頁

手機appUI界面設計賞析(八)

前端達人


手機UI中的交互是保持產品鮮活生命力的源動力。好的交互可以幫助用戶快速地獲得反饋,認知布局,增強體驗感和沉浸感。

手機UI中的交互是保持產品鮮活生命力的源動力。好的交互可以幫助用戶快速地獲得反饋,認知布局,增強體驗感和沉浸感。這里為大家整理了一些優秀并富有創意的交互作品,為你的產品設計注入靈感。

jhk-1589856824505.png

--手機appUI設計--

jhk-1589856834298.jpg

--手機appUI設計--

jhk-1589856847369.jpg

--手機appUI設計--

jhk-1589856965196.png

--手機appUI設計--

jhk-1596893249060.png

--手機appUI設計--

jhk-1596893316552.jpg

--手機appUI設計--

jhk-1596893336786.jpg

--手機appUI設計--

jhk-1597108869110.jpg

--手機appUI設計--

WechatIMG50.png

--手機appUI設計--

WechatIMG51.png

--手機appUI設計--

WechatIMG52.png

--手機appUI設計--

WechatIMG53.png

--手機appUI設計--

WechatIMG54.png

--手機appUI設計--

WechatIMG62.jpeg

--手機appUI設計--

WechatIMG63.jpeg

--手機appUI設計--

WechatIMG66.jpeg

--手機appUI設計--

(以上圖片均來源于網絡)

 





 藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服



  更多精彩文章:

       手機appUI界面設計賞析(一)

       手機appUI界面設計賞析(二)

       手機appUI界面設計賞析(三)

       手機appUI界面設計賞析(四)

       手機appUI界面設計賞析(五)

       手機appUI界面設計賞析(六)

       手機appUI界面設計賞析(七)

JavaScript - 數組排序 6 種常見算法

前端達人

開發中,遇到數組排序的需求很頻繁,這篇文章會介紹幾個常見排序思路。

一、希爾排序(性能最好)

如果要從大到小排列,則 while(arr[n] > arr[n - interval] && n > 0) 。

// 希爾排序算法 function xier(arr){ var interval = parseInt(arr.length / 2);//分組間隔設置 while(interval > 0){ for(var i = 0 ; i < arr.length ; i ++){ var n = i; while(arr[n] < arr[n - interval] && n > 0){ var temp = arr[n]; arr[n] = arr[n - interval]; arr[n - interval] = temp; n = n - interval; } } interval = parseInt(interval / 2); } return arr; } // Array var arr = [10, 20, 40, 60, 60, 0, 30] // 打印排序后的數組 console.log(xier(arr))//[0, 10, 20, 30, 40, 60, 60]  

二、sort排序(普通數組 / 數組嵌套對象)

一堆數組排序

// Array var arr = [10, 20, 40, 60, 60, 0, 30] // 排序方法 arr.sort(function(a,b){ /*
    * return b-a; —> 降序排序
    * return a-b; —> 升序排列
    */ return a-b; })//括號里不寫回調函數則默認按照字母逐位升序排列 // 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60]  

對象數組排序(數組套對象)

//對象數組排序 var arr = [ {name:'syy', age:0}, {name:'wxy', age:18}, {name:'slj', age:8}, {name:'wj', age:20} ]; // 排序方法 function compare(property) {//property:根據什么屬性排序 return function(a,b){ var value1 = a[property]; var value2 = b[property]; /*
        * value2 - value1;  ——> 降序
        * value1 - value2;  ——> 升序
        */ return value1 - value2;//升序排序 } } // 打印排序后的數組 console.log(arr.sort(compare('age'))) /*
0: {name: "syy", age: 0}
1: {name: "slj", age: 8}
2: {name: "wxy", age: 18}
3: {name: "wj", age: 20}
*/  

三、桶排序

特點:簡單,但非常浪費內存,幾乎不用。

桶中出現的數組元素都做個標記 1,然后將桶數組中有 1 標記的元素依次打印。

// Array var arr = [] // 每個數組項做標記(1) for(let i = 0; i < arr.length; i++) { let key = arr[i] arr[key] = 1 } // 遍歷打印出每項 for(let j in arr) { debugger console.log(j) }  

四、冒泡排序

性能:一般(需要每項進行比較)。

每一趟找出最大的值。

// Array var arr = [10, 20, 40, 60, 60, 0, 30] /*
* 總共比較次數為arr.length-1次
* 每次的比較次數為arr.length-1次
* 依次遞減
*/ var temp;//交換變量標識 // 兩層for分別表示當前項與第二項 for(let i = 0; i < arr.length - 1; i++) { for(let j = 0; j < arr.length - 1; j++) { // 如果當前項大于第二項(后一項)則交換 if(arr[j] > arr[j+1]) { temp = arr[j] arr[j] = arr[j+1]; arr[j+1] = temp; } } } // 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60]  

五、選擇排序

性能:一般(需要每項進行比較)。

假定某個位置的值是最小值,與冒泡排序類似。

// Array var arr = [10, 20, 40, 60, 60, 0, 30] var temp;//交換變量標識 // 兩層for分別表示當前項與第二項 for(let i = 0; i < arr.length - 1; i++) { for(let j = i + 1; j < arr.length; j++) { // 假設第二項是最小值(是則交換/否則繼續比較) if(arr[i] > arr[j]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } // 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60] 

六、插入排序

// Array var arr = [10, 20, 40, 60, 60, 0, 30] // 排序算法 for(var i = 0; i < arr.length; i++) { var n = i; while(arr[n] > arr[n+1] && n >= 0) { var temp = arr[n]; arr[n] = arr[n+1]; arr[n+1] = temp; n--; } } // 打印排序后的數組 console.log(arr)//[0, 10, 20, 30, 40, 60, 60]



轉自:https://blog.csdn.net/weixin_44198965/article/details/107996497?utm_medium=distribute.pc_category.none-task-blog-hot-4.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-4.nonecase&request_id=

作者:

手機appUI界面設計賞析(七)

前端達人

手機UI中的交互是保持產品鮮活生命力的源動力。好的交互可以幫助用戶快速地獲得反饋,認知布局,增強體驗感和沉浸感。

手機UI中的交互是保持產品鮮活生命力的源動力。好的交互可以幫助用戶快速地獲得反饋,認知布局,增強體驗感和沉浸感。這里為大家整理了一些優秀并富有創意的交互作品,為你的產品設計注入靈感。

專業又貼心醫療App頁面設計

醫療行業設計案例

微信圖片_20200818185149.jpg

   --手機appUI設計--

微信圖片_20200818185156.jpg

   --手機appUI設計--微信圖片_20200818185200.png

   --手機appUI設計--微信圖片_20200818185204.jpg

   --手機appUI設計--微信圖片_20200818185208.png

   --手機appUI設計--微信圖片_20200818185211.png

   --手機appUI設計--微信圖片_20200818185217.png

   --手機appUI設計--微信圖片_20200818185221.jpg

   --手機appUI設計--微信圖片_20200818185226.jpg

   --手機appUI設計--微信圖片_20200818185229.jpg

   --手機appUI設計--微信圖片_20200818185235.png

   --手機appUI設計--微信圖片_20200818185239.png

   --手機appUI設計--微信圖片_20200818185242.png

   --手機appUI設計--微信圖片_20200818185246.png

   --手機appUI設計--微信圖片_20200818185249.png

   --手機appUI設計--微信圖片_20200818185254.jpg

   --手機appUI設計--微信圖片_20200818185257.jpg

   --手機appUI設計--微信圖片_20200818185301.jpg

   --手機appUI設計--微信圖片_20200818185307.jpg

   --手機appUI設計--微信圖片_20200818185320.png

   --手機appUI設計--微信圖片_20200818185323.jpg

   --手機appUI設計--微信圖片_20200818185326.jpg

   --手機appUI設計--微信圖片_20200818185333.jpg

   --手機appUI設計--微信圖片_20200818185336.jpg

   --手機appUI設計--微信圖片_20200818185339.png

   --手機appUI設計--




(以上圖片均來源于網絡)



  藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服



  更多精彩文章:

       手機appUI界面設計賞析(一)

       手機appUI界面設計賞析(二)

       手機appUI界面設計賞析(三)

       手機appUI界面設計賞析(四)

       手機appUI界面設計賞析(五)

       手機appUI界面設計賞析(六)



你不知道的vue——vue不常用的知識點的整理

前端達人

你不知道的vue——vue不常用的知識點的整理

  1. v-cloak: 使用 v-cloak 指令可以有效解決屏幕閃動。

    有時候,頁面沒渲染之前就會出現vue代碼塊,例如下圖。使用v-cloak可以很好解決這種問題。
    在這里插入圖片描述

    <template> <div class="hello"> <span v-cloak>{{ content }}</span> </div> </template> <script> export default { name: "hello", data() { return { content: "測試" }; } }; </script> <style scoped> /* v-cloak這個屬性會在頁面渲染前作用于對應dom 在渲染完畢這個里面的樣式將被移除 */ [v-cloak] { display: none; } </style>  
            
  2. keep-alive

    官網是這么解釋的:

    在這里插入圖片描述

    例如:可以實現頁面緩存,比如從編輯頁切出去再切進來,頁面還是處于編輯狀態.

    1. 需要在router.js中設置meta屬性,meta下的keepAlive屬性設置為true,代表這個頁面需要進行緩存。

      import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/components/HelloWorld' import is from '@/view/is' import list from '@/view/list' import detail from '@/view/detail' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'HelloWorld', component: HelloWorld, meta: { keepAlive: false, title: 'HelloWorld' } }, { path: '/is', name: 'is', component: is, meta: { keepAlive: false, title: 'is' } }, { path: '/list', name: 'list', component: list, meta: { keepAlive: true, title: 'list' } }, { path: '/detail', name: 'detail', component: detail, meta: { keepAlive: true, title: 'detail' } } ] })  
                      
    2. app.vue中修改一下代碼<router-view />

      <template> <div id="app"> <keep-alive> <!--緩存組件--> <router-view v-if="$route.meta.keepAlive" /> </keep-alive> <!--非緩存組件--> <router-view v-if="!$route.meta.keepAlive" /> </div> </template> <script> export default { name: "App" }; </script> <style> #app { font-family: "Avenir", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } </style>  
                      
    3. 在詳情頁detail.vue中,注意beforeRouteEnterbeforeRouteLeave兩個方法。

      <template> <div class="detail"> <!-- form表單,用于測試是否緩存 --> <Form ref="formCustom" :model="formItem" :label-width="80"> <FormItem label="Input"> <Input v-model="formItem.input" placeholder="Enter something..."></Input> </FormItem> <FormItem label="Select"> <Select v-model="formItem.select"> <Option value="beijing">New York</Option> <Option value="shanghai">London</Option> <Option value="shenzhen">Sydney</Option> </Select> </FormItem> <FormItem label="DatePicker"> <Row> <Col span="11"> <DatePicker type="date" placeholder="Select date" v-model="formItem.date"></DatePicker> </Col> <Col span="2" style="text-align: center">-</Col> <Col span="11"> <TimePicker type="time" placeholder="Select time" v-model="formItem.time"></TimePicker> </Col> </Row> </FormItem> <FormItem label="Radio"> <RadioGroup v-model="formItem.radio"> <Radio label="male">Male</Radio> <Radio label="female">Female</Radio> </RadioGroup> </FormItem> <FormItem label="Checkbox"> <CheckboxGroup v-model="formItem.checkbox"> <Checkbox label="Eat"></Checkbox> <Checkbox label="Sleep"></Checkbox> <Checkbox label="Run"></Checkbox> <Checkbox label="Movie"></Checkbox> </CheckboxGroup> </FormItem> <FormItem label="Switch"> <i-switch v-model="formItem.switch" size="large"> <span slot="open">On</span> <span slot="close">Off</span> </i-switch> </FormItem> <FormItem label="Slider"> <Slider v-model="formItem.slider" range></Slider> </FormItem> <FormItem label="Text"> <Input
                          v-model="formItem.textarea" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="Enter something..." ></Input> </FormItem> <FormItem> <Button type="primary">Submit</Button> <Button style="margin-left: 8px">Cancel</Button> </FormItem> <FormItem> <router-link :to="{name:'list'}"> <Button size="small" type="primary">跳轉到列表頁</Button> </router-link> <router-link :to="{name:'is'}"> <Button size="small" type="primary">跳轉到is頁</Button> </router-link> </FormItem> </Form> </div> </template> <script> export default { name: "detail", mixins: [], components: {}, filters: {}, props: [], computed: {}, data() { return { formItem: { input: "", select: "", radio: "male", checkbox: [], switch: true, date: "", time: "", slider: [20, 50], textarea: "" } }; }, watch: {}, created() { }, mounted() { }, methods: { // 重置表單 init() { this.$refs[formCustom].resetFields(); } }, // 路由進來之前,判斷是從哪個頁面過來的,設置不同的keepAlive屬性 beforeRouteEnter(to, from, next) { if (from.name === "list") { to.meta.keepAlive = true; } else { to.meta.keepAlive = false; } next(); // beforeRouteEnter不能通過this訪問組件實例,但是可以通過 vm 訪問組件實例(剛開始錯誤寫法) // next(vm => { //     if (from.name === "list") { //         // 在這里修改keepAlive值,是不能緩存數據的,因為在next()里面的代碼,是在vue掛載之后執行,處于activated之后,此時activated中keepAlive還是false //         vm.$route.meta.keepAlive = true; //     } else { //         vm.$route.meta.keepAlive = false; //     } // }); }, // 路由離開之前,判斷去往哪個頁面,設置不同的keepAlive屬性 beforeRouteLeave(to, from, next) { if (to.name === "list") { this.$route.meta.keepAlive = true; } else { this.$route.meta.keepAlive = false; } next(); }, activated() { // 此方法在頁面緩存時會被調用(this.$route.meta.keepAlive為true時),根據路由元信息決定是否重新加載數據。不加載則是上次填寫完的數據 // console.log(this.$route.meta.keepAlive); } }; </script> <style scoped lang="less"> .detail { position: relative; height: 100%; width: 100%; } </style>  
                      
  3. 插槽slot
    解構插槽 Prop:可以傳遞子組件的變量

    // 子組件 <template> <div class="isComponent"> <slot name='one' :childStr='childStr'></slot> <slot name='two'></slot> <slot></slot> </div> </template> <script> export default { name: "isComponent", data() { return { childStr: 'i am a child', }; } }; </script> <style scoped> </style> // 父組件 <is-component> <template #one="{childStr}">{{childStr}}</template> <template v-slot:two> two </template> <template> default </template> </is-component>  
            

    效果:// i am a child two default

  4. 強制刷新某個div

    vue實現F5刷新整個頁面無空白無間隔時間

  5. 修飾符
    事件修飾符:

    1. .stop:相當于原生JS中event.stopPropagation(),阻止事件冒泡。

    2. .prevent:相當于原生JS中event.preventDefault(),阻止默認事件的發生。

    3. .capture:事件冒泡的方向相反,事件捕獲由外到內。即有冒泡發生時,有該修飾符的dom元素會先執行,如果有多個,從外到內依次執行。

    4. .self:只會觸發自己范圍內的事件,不包含子元素。
      在這里插入圖片描述

    5. .once:事件只能觸發一次。

    6. .passive:事件會執行默認方法。

      注:

      1. 每次事件產生,瀏覽器都會去查詢一下是否有preventDefault阻止該次事件的默認動作。我們加上passive就是為了告訴瀏覽器,不用查詢了,我們沒用preventDefault阻止默認動作。
      2. passiveprevent沖突,不能同時綁定在一個監聽器上

    按鍵修飾符: 去官網查看即可,這里不過多解釋。Vue.js-修飾符

  6. :is: 動態組件

    優點:使代碼更符合HTML語法驗證

    官網是這么解釋的
    在這里插入圖片描述

    // 父組件: <template> <div class="is"> <table> <tr :is='is'></tr> </table> </div> </template> <script> import isComponent from '../components/isComponent' export default { name: "is", components: { isComponent }, data() { return { is: 'isComponent' }; } }; </script> <style scoped> </style> // 子組件: <template> <div class="isComponent"> <span>我是tr</span> </div> </template> <script> export default { name: "isComponent", data() { return {}; } }; </script> <style scoped> </style>  
            
  7. @click.native: 在封裝好的組件上使用,要加上.native才能click。

    1. router-link 加上@click事件,綁定的事件會無效因為:router-link的作用是單純的路由跳轉,會阻止click事件,你可以試試只用click不用native,事件是不會觸發的。此時加上.native,才會觸發事件。
    2. 根據Vue2.0官方文檔關于父子組件通訊的原則,父組件通過prop傳遞數據給子組件,子組件觸發事件給父組件。但父組件想在子組件上監聽自己的click的話,需要加上native修飾符。

    // router-link <router-link :to="{name:'detail'}" @click.native="handleNative"> <Button size="small" type="primary">測試native</Button> </router-link> // 自己封裝的組件 <is-component @click.native="handleNative"></is-component>


作者:

轉自:https://blog.csdn.net/a5252145/article/details/107316953?utm_medium=distribute.pc_category.427508.nonecase&depth_1-utm_source=distribute.pc_category.427508.nonecase

JavaScript專題之深淺拷貝(系列五)[轉載]

前端達人

JavaScript專題之深淺拷貝

了解拷貝背后的過程,避免不必要的錯誤,Js專題系列之深淺拷貝,我們一起加油~

目錄

一、拷貝示例

當我們在操作數據之前,可能會遇到這樣的情況:

  1. 會經常改動一組數據,但可能會用到原始數據
  2. 我需要兩組一樣的數據,但我不希望改動一個另一個隨之改動
  3. 我需要對數據操作前后進行對比

當我們遇到類似需要場景時,首先想到的就是拷貝它,殊不知拷貝也大有學問哦~

下面簡單的例子,你是否覺得熟悉?

1.1 基本類型拷貝示例
var str = 'How are you'; var newStr = str; newStr = 10 console.log(str); // How are you console.log(newStr); // 10 

大家都能想到,字符串是基本類型,它的值保存在棧中,在對它進行拷貝時,其實是為新變量開辟了新的空間。 strnewStr就好比兩個一模一樣的房間,布局一致卻毫無關聯。

1.2 引用類型拷貝示例
var data = [1, 2, 3, 4, 5]; var newData = data; newData[0] = 100; console.log(data[0]); // 100 console.log(newData[0]); // 100 

類似的代碼段,但這次我們使用數組這個引用類型舉例,你會發現修改賦值后的數據,原始數據也跟著改變了,這顯然不滿足我們的需要。本篇文章就來聊一聊引用數據拷貝的學問。

如果大家對Js的數據類型存在著疑問,不妨看看《JavaScript中的基本數據類型》

在這里插入圖片描述

二、淺拷貝

拷貝的劃分都是針對引用類型來討論的,淺拷貝——顧名思義,淺拷貝就是“淺層拷貝”,實際上只做了表面功夫:

var arr = [1, 2, 3, 4]; var newArr = arr; console.log(arr, newArr); // [1,2,3,4] [1,2,3,4] newArr[0] = 100; console.log(arr, newArr) // [100,2,3,4] [100,2,3,4] 

不發生事情(操作)還好,一旦對新數組進行了操作,兩個變量中所保存的數據都會發生改變。

發生這類情況的原因也是因為引用類型的基本特性:

  • 存儲在變量處的值是一個指針(point),指向存儲對象的內存地址。賦值給新變量相當于配了一把新鑰匙,房間并沒有換。

數組中的slice和concat都會返回一個新數組,我們一起來試一下:

var arr = [1,2,3,4]; var res = arr.slice(); // 或者 res = arr.concat() res[0] = 100; console.log(arr); // [1,2,3,4] 

這個問題這么快就解決了?雖然對這一層數據進行了這樣的的處理后,確實解決了問題,但!

var arr = [ { age: 23 }, [1,2,3,4] ]; var newArr = arr.concat(); arr[0].age = 18; arr[1][0] = 100; console.log(arr) // [ {age: 18}, [100,2,3,4] ] console.log(newArr) // [ {age: 18}, [100,2,3,4] ] 

果然事情沒有那么簡單,這也是因為數據類型的不同。

S 不允許我們直接操作內存中的地址,也就是說不能操作對象的內存空間,所以,我們對對象的操作都只是在操作它的引用而已。

既然淺拷貝達不到我們的要求,本著效率的原則,我們找找有沒有幫助我們實現深拷貝的方法。

在這里插入圖片描述

三、深拷貝的方法?

數據的方法失敗了,還有沒有其他辦法?我們需要實現真正意義上的拷貝出獨立的數據。

3.1 JSON

這里我們利用JSON的兩個方法,JSON.stringify(),JSON.parse()來實現最簡潔的深拷貝

var arr = ['str', 1, true, [1, 2], {age: 23}] var newArr = JSON.parse( JSON.stringify(arr) ); newArr[3][0] = 100; console.log(arr); // ['str', 1, true, [1, 2], {age: 23}] console.log(newArr); // ['str', 1, true, [100, 2], {age: 23}] 

這個方法應該是實現深拷貝最簡潔的方法,但是,它仍然存在問題,我們先來看看剛才都做了些什么:

  1. 定義一個包含都過類型的數組arr
  2. JSON.stringify(arr), 將一個 JavaScript 對象或值轉換為 JSON 字符串
  3. JSON.parse(xxx), 方法用來解析JSON字符串,構造由字符串描述的值或對象

理解:

我們可以理解為,將原始數據轉換為新字符串,再通過新字符串還原為一個新對象,這中改變數據類型的方式,間接的繞過了拷貝對象引用的過程,也就談不上影響原始數據。

限制:

這種方式成立的根本就是保證數據在“中轉”時的完整性,而JSON.stringify()將值轉換為相應的JSON格式時也有缺陷:

  • undefined、任意的函數以及 symbol 值,在序列化過程中會被忽略(出現在非數組對象的屬性值中時)或者被轉換成 null(出現在數組中時)。
  • 函數、undefined 被單獨轉換時,會返回 undefined,
    • 如JSON.stringify(function(){})
    • JSON.stringify(undefined)
  • 對包含循環引用的對象(對象之間相互引用,形成無限循環)執行此方法,會拋出錯誤。
  • NaN 和 Infinity 格式的數值及 null 都會被當做 null。
  • 其他類型的對象,包括 Map/Set/WeakMap/WeakSet,僅會序列化可枚舉的屬性。

所以當我們拷貝函數、undefined等stringify轉換有問題的數據時,就會出錯,我們在實際開發中也要結合實際情況使用。

舉一反三:

既然是通過改變數據類型來繞過拷貝引用這一過程,那么單純的數組深拷貝是不是可以通過現有的幾個API來實現呢?

var arr = [1,2,3]; var newArr = arr.toString().split(',').map(item => Number(item)) newArr[0] = 100; console.log(arr); // [1,2,3] console.log(newArr); // [100,2,3] 

注意,此時僅能對包含純數字的數組進行深拷貝,因為:

  1. toString無法正確的處理對象和函數
  2. Number無法處理 false、undefined等數據類型

但我愿稱它為純數字數組深拷貝

在這里插入圖片描述

3.2 Object.assign()

有的人會認為Object.assign(),可以做到深拷貝,我們來看一下

var obj = {a: 1, b: { c: 2 } } var newObj = Object.assign({}, obj) newObj.a = 100; newObj.b.c = 200; console.log(obj); // {a: 1, b: { c: 200 } } console.log(newObj) // {a: 100, b: { c: 200 } } 

神奇,第一層屬性沒有改變,但第二層卻同步改變了,這是為什么呢?

因為 Object.assign()拷貝的是(可枚舉)屬性值。

假如源值是一個對象的引用,它僅僅會復制其引用值。MDN傳送門

四、自己實現深淺拷貝

既然現有的方法無法實現深拷貝,不妨我們自己來實現一個吧~

4.1 淺拷貝

我們只需要將所有屬性即其嵌套屬性原封不動的復制給新變量一份即可,拋開現有的方法,我們應該怎么做呢?

var shallowCopy = function(obj) { if (typeof obj !== 'object') return; // 根據obj的類型判斷是新建一個數組還是對象 var newObj = obj instanceof Array ? [] : {}; // 遍歷obj,并且判斷是obj的屬性才拷貝 for (var key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = obj[key]; } } return newObj; } 

我們只需要將所有屬性的引用拷貝一份即可~

4.2 深拷貝

相信大家在實現深拷貝的時候都會想到遞歸,同樣是判斷屬性值,但如果當前類型為object則證明需要繼續遞歸,直到最后

var deepCopy = function(obj) { if (typeof obj !== 'object') return; var newObj = obj instanceof Array ? [] : {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]; } } return newObj; } 

我們用白話來解釋一下deepCopy都做了什么

const obj = [1, { a: 1, b: { name: '余光'} } ]; const resObj = deepCopy(obj); 
  • 讀取 obj,創建 第一個newObj
    • 判斷類型為 []
    • key為 0 (for in 以任意順序遍歷,我們假定按正常循序遍歷)
    • 判斷不是引用類型,直接復制
    • key為 1
    • 判斷是引用類型
    • 進入遞歸,重新走了一遍剛才的流程,只不過讀取的是obj[1]

另外請注意遞歸的方式雖然可以深拷貝,但是在性能上肯定不如淺拷貝,大家還是需要結合實際情況來選擇。




作者: 

轉自:https://blog.csdn.net/jbj6568839z/article/details/107964274?utm_medium=distribute.pc_category.none-task-blog-hot-4.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-4.nonecase&request_id=

最詳細完整的flex彈性布局

前端達人

初了解

在學習彈性布局之前首先就要明白其概念
flex 就是flexible box的縮寫,意為彈性布局,用來為盒裝模型提供最大的靈活性
任何一個容器都可以指定為flex布局

.box{ display: flex; } 

行內元素當然也可以使用flex布局

.box{ display: inline-flex; } 

Webkit 內核的瀏覽器,必須加上-webkit前綴。

.box{ display: -webkit-flex; /* Safari */ display: flex; } 

注意:設為 Flex 布局以后,子元素的float、clear和vertical-align屬性將失效。

基本概念

采用 Flex 布局的元素,稱為 Flex 容器(flex container),簡稱"容器"。它的所有子元素自動成為容器成員,稱為 Flex 項目(flex item),簡稱"項目"。
在這里插入圖片描述
容器默認存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫做main start,結束位置叫做main end;交叉軸的開始位置叫做cross start,結束位置叫做cross end。
項目默認沿主軸排列。單個項目占據的主軸空間叫做main size,占據的交叉軸空間叫做cross size。
以上這些基礎概念,請務必牢記,下面說屬性時,不再重復說明!

屬性

容器屬性(container)

  • flex-direction
  • justify-content
  • align-items
  • flex-wrap
  • align-content
  • flex-flow

1.flex-direction

 flex items默認都是沿著main axis(主軸)從main start 開始往main end方向排布
    flex-direction決定了main axis的方向,有四個取值row(默認值)、row-reverse、column、column-reverse 
.box { flex-direction: row | row-reverse | column | column-reverse; } 

row(默認值):主軸為水平方向,起點在左端。
row-reverse:主軸為水平方向,起點在右端。
column:主軸為垂直方向,起點在上沿。
column-reverse:主軸為垂直方向,起點在下沿。

2.justify-content

 justify-content決定了flex item在main axis上的對齊方式

    flex-start(默認值):與main start對齊
    flex-end:與main end對齊
    center:居中
    space-between:flex items 之間的距離相等,與main start、main end兩端對齊
    space-evently: flex items 之間的距離相等,flex items與main start 、main end 之間的距離等于flex items之間的距離
    space-around :flex items 之間的距離相等,flex items與main start 、main end 之間的距離等于flex items之間的距離的一半 

這個屬性的目的主要就是為了排列main axis的item位置
在這里插入圖片描述

在這里插入圖片描述
當然,這些屬性你可以自己嘗試一下,這里就不再一一嘗試了,但是注意,這些都是容器的屬性,要寫在容器的css中!

3.align-items

 決定flex items在cross axis上的對齊方式

    normal:在彈性布局中,效果和stretch一樣
    stretch:前提是items不設置高度,當flex items 在cross axis 方向的size為auto時,會自動拉伸至填充flex container(或者換句話說:如果項目未設置高度或設為auto,將占滿整個容器的高度。)
    flex-satrt:與cross start 對齊
    flex-end:與cross end 對齊
    center:居中對齊
    baseline:與基準線對齊 

4.flex-wrap

 決定了flex container 是單行還是多行
    nowrap(默認):單行
    warp:多行
    //這個比較少用
    wrap-reverse:多行(對比wrap,cross start 與cross end相反) 

默認情況下,項目都排在一條線(又稱"軸線")上。flex-wrap屬性定義,如果一條軸線排不下,如何換行。

5 align-content

 決定了多行flex items 在cross axis的對齊方式 用法與justify-content相似 一個是橫軸。一個控制豎軸
    stretch(默認值):與align-items的stretch類似,當items有高度的時候,無效果
    flex-start:與cross start 對齊
    flex-end :與cross end 對齊
    center:居中對齊
    space-between:flex items 之間的距離相等,與cross start、cross end兩端對齊
    space-evently: flex items 之間的距離相等,flex items與cross start 、cross end 之間的距離等于flex items之間的距離
    space-around :flex items 之間的距離相等,flex items與cross start 、cross end 之間的距離等于flex items之間的距離的一半 

6 flex-flow 是flex-direction與flex-wrap的簡寫

也就是說,當你使用這個屬性的時候,你可以使用上述兩個的屬性值,例如:flex-flow: row wrap;(水平排列,多行顯示)

flex 項目屬性(item屬性)

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • align-self
  • flex

1 order

 order 決定flex items的排布順序  (用的不多)
    可以設置為任意整數(正整數、負整數、0),值越小越排在前面
    默認值為0 

這個屬性了解即可,說實話沒怎么用過

2 align-self

 可以通過align-self 覆蓋flex container 設置的align-items
    auto(默認值):遵從flex container的align-items設置
    stretch、flex-start、flex-end、center、baseline效果與align-items一致 

相當于繼承父元素的align-items屬性,如果沒有父元素,則等同于stretch。

3 flex-grow

 決定了flex items如何擴展
    可以設置為任意非父數字(小數,整數 0),默認為0
    當flex container 在main axis方向上有剩余得size時,flex-grow屬性才會有效

    如果所有flex items 的flex-grow 綜合sum不超過1,這直接乘以剩余size就是擴展大小、
    如果超過1 擴展size=剩余size*flex-grow/sum 

flex-grow屬性定義項目的放大比例,默認為0,即如果存在剩余空間,也不放大。

4 flex-shrink

flex-shrink (shrink 縮小,收縮)與flex-grow相似,一個擴展,一個伸縮 
    可以設置為任意非父數字(小數,整數 0),默認為1
    當flex items在main axis 方向上超過了flex container 的size flex-shrink屬性才會生效、
    如果所有flex items 的flex-shrink 總和sum超過1,每個flex item 收縮的size為:
        flex item 超出flex container 的size*收縮比例/每個flex items 的收縮比例之和
    如果sum不超過1,每個flex item 收縮的size為:
        size = 超出的size * flex-shrink值
    flex items收縮后的最終size不能小于min-width\min-height 

有擴大自然就會有縮小,flex-shrink屬性定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。
如果所有項目的flex-shrink屬性都為1,當空間不足時,都將等比例縮小。如果一個項目的flex-shrink屬性為0,其他項目都為1,則空間不足時,前者不縮小。具體的可以自己動手嘗試一下哦,最后將會給出一個骰子布局的案例!

5 flex-basis

用來設置flex items 在 main axis方向上的base size
    默認為auto,可以設置具體的寬度數值

    決定flex items最終base size 的因素,優先級從高到低
        max-width\max-height\min-width\min-height
        flex-basis
        width\height
        內容本身的size 

flex-basis屬性定義了在分配多余空間之前,項目占據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多余空間。它的默認值為auto,即項目(item)的本來大小。也可以設置跟width,height一樣的寬高,表示item將占據固定的空間!

6 flex

flex 是flex-grow || flex-shink||flex-basis的簡寫
可以指定1 2 3個值 依次按照上述順序!默認值為 0 1 auto 
.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] } 

注意:

  1. 該屬性的默認值為 0 1 auto(注意順序),后兩個屬性可選
  2. 該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)。
  3. 如果需要這三個屬性的時候,建議使用flex,而不是單獨的三個分離的屬性,因為瀏覽器會推算相關值

骰子布局實踐

光說不練假把式,手撕代碼真功夫!
下面利用flex寫了幾個骰子布局,可以參考一下!

 
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            #container{
                background-color: #CCCCCC;
                height: 600px;
                width: 500px;
                /* flex */
                display: flex;
                justify-content: space-evenly;
                align-items: center;
            }
            .item{
                background-color: yellow;
                width: 100px;
                height: 100px;

            }
            /* 單點 */
            .one{
                /* 對點使用flex布局 */
                display: flex;
                justify-content: center;
                align-items: center;
            }
            /* 點 */
            .item-one{
                display: block;
                height: 20px;
                width: 20px;
                background-color: #1890FF;
                border-radius: 50%;
            }
            /* 三點 */
            .two{

                display: flex;
                justify-content: space-between;
            }
            .two span{
                margin: 2px;
                display: block;
                height: 20px;
                width: 20px;
                border-radius: 50%;
                background-color: #1890FF;
            }
            .two2{
                align-self: center;
            }
            .two3{
                align-self: flex-end;
            }
            /* 五點 */
            .three{
                display: flex;
                justify-content: space-around;
            }
            .three span{
                display: block;
                height: 20px;
                width: 20px;
                border-radius: 50%;
                background-color: #1890FF;
            }
            #three_one, #three_three{
                padding: 2px;
                display: flex;
                flex-direction: column;
                justify-content: space-between;
            }
            #three_two{
                display: flex;
                flex-direction: column;
                justify-content: center;
            }
            /* 六點 */
            .four{
                display: flex;
                justify-content: space-around;
            }
            .four span{
                display: block;
                height: 20px;
                width: 20px;
                border-radius: 50%;
                background-color: #1890FF;
            }
            #four1,#four2{
                padding: 2px;
                display: flex;
                flex-direction: column;
                justify-content: space-between;
            }
        </style>
    </head>
    <body>
        <div id="container">
            <!-- 一個點居中 -->
            <div class="item one">
                <span class="item-one"></span>
            </div>
            <!-- 三點 -->
            <div class="item two">
                <span class="two1"></span>
                <span class="two2"></span>
                <span class="two3"></span>
            </div>
            <!-- 五點 -->
            <div class="item three">
                <div id="three_one">
                    <span></span>
                    <span></span>
                </div>
                <div id="three_two">
                    <span></span>
                </div>
                <div id="three_three">
                    <span></span>
                    <span></span>
                </div>
            </div>
            <!-- 六點 -->
            <div class="item four">
                <div id="four1">
                    <span></span>
                    <span></span>
                    <span></span>
                </div>
                <div id="four2">
                    <span></span>
                    <span></span>
                    <span></span>
                </div>
            </div>

        </div>
    </body>
</html>

測試結果

在這里插入圖片描述



手機appUI界面設計賞析(六)

前端達人

手機UI中的交互是保持產品鮮活生命力的源動力。好的交互可以幫助用戶快速地獲得反饋,認知布局,增強體驗感和沉浸感。

手機UI中的交互是保持產品鮮活生命力的源動力。好的交互可以幫助用戶快速地獲得反饋,認知布局,增強體驗感和沉浸感。這里為大家整理了12款優秀并富有創意的交互作品,為你的產品設計注入靈感。

微信圖片_20200813161550.png


   --手機appUI設計--


微信圖片_20200813161602.png



   --手機appUI設計--


微信圖片_20200813161606.png


   --手機appUI設計--


微信圖片_20200813161617.png



   --手機appUI設計--


微信圖片_20200813161622.png



   --手機appUI設計--


微信圖片_20200813161629.png



   --手機appUI設計--


微信圖片_20200813161633.png



   --手機appUI設計--


微信圖片_20200813161644.png



   --手機appUI設計--


微信圖片_20200813161647.jpg



   --手機appUI設計--


微信圖片_20200813161650.jpg



   --手機appUI設計--


微信圖片_20200813161653.jpg



   --手機appUI設計--


微信圖片_20200813161702.jpg



   --手機appUI設計--


微信圖片_20200813161710.jpg



   --手機appUI設計--


微信圖片_20200813161713.png



   --手機appUI設計--


微信圖片_20200813161718.jpg



   --手機appUI設計--


微信圖片_20200813161722.png



   --手機appUI設計--


微信圖片_20200813161724.jpg



   --手機appUI設計--


微信圖片_20200813161728.jpg



   --手機appUI設計--


微信圖片_20200813161748.png



   --手機appUI設計--


(以上圖片均來源于網絡)



  藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服



  更多精彩文章:

       手機appUI界面設計賞析(一)

       手機appUI界面設計賞析(二)

       手機appUI界面設計賞析(三)

       手機appUI界面設計賞析(四)

       手機appUI界面設計賞析(五)




Vue.js教程-目錄

前端達人

簡介

  • 本目錄作為Vue教程的首頁,所以會持續更新。
  • 如果某篇章節中有錯誤的地方,希望大家能夠指出來,我會更正,私信和評論里說都可以,不懂的地方也可以說,如果我也不會那就請教一下大佬們吧,畢竟我對前端的東西也不是特別了解,多多包涵!嘿嘿。

章節列表

章節名稱 地址
Vue.js教程-安裝和HelloWorld https://coderhqf.blog.csdn.net/article/details/107574556
Vue.js教程-Vue項目的目錄結構和.vue文件的構成 https://coderhqf.blog.csdn.net/article/details/107621070
Vue.js教程-Vue基本指令 https://coderhqf.blog.csdn.net/article/details/107677588
Vue.js教程-組件化開發 https://coderhqf.blog.csdn.net/article/details/107783664

Vue簡介

  • Vue官網
  • Vue (讀音 /vju?/,類似于 view) 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。
  • Vue 的核心庫只關注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合。另一方面,當與現代化的工具鏈以及各種支持類庫結合使用時,Vue 也完全能夠為復雜的單頁應用提供驅動。
  • Vue.js 的目標是通過盡可能簡單的 API 實現響應的數據綁定和組合的視圖組件。

Vue特點

  • 易用:在有HTML CSS JavaScript的基礎上,快速上手。
  • 靈活:簡單小巧的核心,漸進式技術棧,足以應付任何規模的應用。
  • 性能:20kb min+gzip 運行大小、超快虛擬 DOM 、最省心的優化。

Vue中數據觀測的實現

  • Vue.js利用了ES5的Object.defineProperty方法,直接將原生數據對象的屬性改造為getter和setter,在這兩個函數內部實現依賴的收集和觸發,而且完美支持嵌套的對象結構。對于數組,則通過包裹數組的可變方法(比如push)來監聽數組的變化。這使得操作Vue.js的數據和操作原生對象幾乎沒有差別[注:在添加/刪除屬性,或是修改數組特定位置元素時,需要調用特定的函數,如obj.$add(key, value)才能觸發更新。這是受ES5的語言特性所限。],數據操作的邏輯更為清晰流暢,和第三方數據同步方案的整合也更為方便。

Vue項目打包

  • 在構建大型應用時,推薦使用Webpack+vue-loader這個組合以使針對組件的開發更。
  • 在后面的章節中會細說怎么打包并部署到服務器上,也會講怎么白嫖阿里云(學生版),好像有大佬寫過這個文章,大家搜一下也行,最重要的還是開發。

Vue的組件化開發

  • Vue最主要的是組件化開發,因為是單頁面,也就是在一個頁面中渲染出多個頁面的效果,這個特點能夠讓非常多的組件在不同的項目中重復使用。
  • Vue中的組件基于Web components進行了上層功能的實現,例如數據綁定、動畫系統等。

Vue與后端的數據交互:axios

  • 傳統的一般都用Ajax,但如果請求有先后關系的話就容易產生回調地獄,套娃套的吧。
  • Vue2之后就推薦使用axios了,等寫到前后端交互的時候再講這個就行。

相關說明

  • Vue參考了AngularJS、KnockoutJS、Ractive.js、Rivets.js,可以是把他們的缺點都優化成了自己的優點,參考過程中不但去其糟粕,還加入了自己的特性,但目前也只有國內用Vue的比較多,畢竟社區小,資源少,但以后應該會是潮流,因為開發快好上手。
  • 其實Vue相對來說是非常好上手的,因為它只專注于視圖層。如果只是要用的話,其實對原理也不用太糾結,但既然要全棧,何不貫徹到底,我也是在學習中,如果想正規學習的話,我比較推薦coderwhy-王紅君老師的課,他講的挺好的,有些原理講的也是很清楚的,渠道嘛,B站大學、騰訊課堂啥的都有,還有他的微博,大家可以去網上找。
  • 再強調一遍,如果發現不對的地方請聯系我,因為不想誤人子弟,畢竟這是自己的總結,也不想以后自己還用著錯誤的東西,嘿嘿嘿。。。
  • Vue作為現在國內最潮流的前端框架,也逐漸成為后端開發人員需要學的新知識了,我看現在很多后端崗位的面試里都會提到這個前端框架,所以大家學一下是不虧的。
  • 在CSDN雜志中有一篇文章:Vue.js:輕量的前端組件化方案,如果大家有興趣就看看吧。

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_45062103/article/details/107763788

手機appUI界面設計賞析(五)

前端達人

與傳統PC桌面不同,手機屏幕的尺寸更加小巧操作,方式也已觸控為主,APP界面設計不但要保證APP功能的完整性和合理性,又要保證APP的功能性和實用性,在保證其擁有流暢的操作感受的同時,滿足人們的審美需求。

接下來為大家介紹幾款手機appui界面設計

點擊查看原圖


   --手機appUI設計--

點擊查看原圖

 --手機appUI設計--

點擊查看原圖

 --手機appUI設計--

微信圖片_20200805221704.png

 --手機appUI設計--

微信圖片_20200805221707.jpg

 --手機appUI設計--

微信圖片_20200805221712.jpg

 --手機appUI設計--

微信圖片_20200805221759.png

 --手機appUI設計--

微信圖片_20200805221803.jpg

 --手機appUI設計--

微信圖片_20200805221808.png

 --手機appUI設計--

微信圖片_20200805221813.jpg

 --手機appUI設計--

微信圖片_20200805221823.jpg

 --手機appUI設計--

(以上圖片均來源于網絡)



  藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服



  更多精彩文章:

       手機appUI界面設計賞析(一)

       手機appUI界面設計賞析(二)

       手機appUI界面設計賞析(三)

       手機appUI界面設計賞析(四)




手機appUI界面設計賞析(四)

前端達人

與傳統PC桌面不同,手機屏幕的尺寸更加小巧操作,方式也已觸控為主,APP界面設計不但要保證APP功能的完整性和合理性,又要保證APP的功能性和實用性,在保證其擁有流暢的操作感受的同時,滿足人們的審美需求。

接下來為大家介紹幾款手機appui界面設計

微信圖片_20200721175459.jpg

微信圖片_20200721175502.jpg

微信圖片_20200721175510.jpg

微信圖片_20200721175514.jpg

微信圖片_20200721175540.jpg

微信圖片_20200721175544.jpg

微信圖片_20200721175548.jpg

微信圖片_20200721175624.png

微信圖片_20200721175631.jpg

微信圖片_20200721175635.jpg

微信圖片_20200721175639.jpg

微信圖片_20200727222354.png

微信圖片_20200727222406.jpg

微信圖片_20200727222412.png

微信圖片_20200727222421.jpg

微信圖片_20200727222431.jpg


   --手機appUI設計--


(以上圖片均來源于網絡)



  藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服



  更多精彩文章:

       手機appUI界面設計賞析(一)

       手機appUI界面設計賞析(二)

       手機appUI界面設計賞析(三)



日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
久久伊人精品视频| 国产精品夜色7777狼人| 欧美国产精品一区| 久久久夜夜夜| 亚洲高清视频一区二区| 欧美一区二区三区在线观看| 国产精品区一区二区三| 奇米777国产一区国产二区| 51色欧美片视频在线观看| 久久久久久久久久久久久久久久久久久久| 欧美一区三区二区| 日本高清中文字幕在线| 一区二区亚洲视频| 视频一区二区中文字幕| 亚洲搞黄视频| 成人永久免费| 欧美日韩综合在线免费观看| av有声小说一区二区三区| 日本h片在线观看| 91麻豆精东视频| 色噜噜狠狠色综合欧洲selulu| 日本三级韩国三级欧美三级| 国产午夜亚洲精品不卡| 久久精品在线免费观看| 国产精品久久久久一区二区| 久久久91精品国产一区不卡| 91蜜桃网站免费观看| 在线免费不卡视频| www.日韩欧美| 成人片在线免费看| 午夜精品福利久久久| 国产一卡不卡| 蜜桃av色综合| 国产精品福利久久久| 亚洲免费av网址| 国产91丝袜在线播放0| 欧美二区乱c黑人| 精品国产乱码久久| 免费av不卡在线观看| 成人成人成人在线视频| 色综合久久久久久久久| 亚洲愉拍自拍另类高清精品| 成年午夜在线| 亚洲狼人综合| 日本欧美中文字幕| 久久免费电影| 欧美在线看片| 国产欧美日韩三区| 国产v亚洲v天堂无码| 亚洲综合国产激情另类一区| 国产精品久久久久久久裸模| 色爱精品视频一区| 国产精品无圣光一区二区| 一区二区三区在线免费视频| 国产午夜三级一区二区三| 神马影院我不卡| 懂色av中文一区二区三区| 欧美午夜在线一二页| 成人在线网站| 亚洲无毛电影| 99视频精品全部免费在线视频| 色综合欧美在线| 性欧美又大又长又硬| 18video性欧美19sex高清| 一区二区三区午夜视频| 欧美在线观看天堂一区二区三区| 爱啪啪综合导航| 国产精品成人一区| 欧美久久一二三四区| 日韩毛片网站| 精品日韩在线一区| 国产999精品久久久久久绿帽| 色噜噜狠狠狠综合曰曰曰88av| 亚洲精品一区二区三区婷婷月| 亚洲第一精品夜夜躁人人躁| 蜜桃精品噜噜噜成人av| 午夜在线小视频| 欧美高清无遮挡| 久久亚洲精品中文字幕冲田杏梨| 亚洲一区亚洲| 日本一道高清亚洲日美韩| 国产suv精品一区二区| 人人做人人澡人人爽欧美| 国产精品亚洲欧美日韩一区在线| 久久久综合免费视频| 欧美破处大片在线视频| 精品福利一区二区| 亚洲va国产va欧美va观看| 欧美丰满老妇厨房牲生活| 久久精品五月| 国产成人精品亚洲日本在线桃色| 国模无码大尺度一区二区三区| 日韩欧美视频一区二区| 亚洲国产视频网站| 亚洲97在线观看| 91超碰国产在线| 国模视频一区| yy111111少妇影院日韩夜片| 伊人久久久久久久久久久| 欧美成熟视频| 激情综合久久| 欧美日韩黄色大片| 日韩视频一区二区三区四区| 国产精品对白刺激久久久| 天天揉久久久久亚洲精品| 亚洲成人a级片| 成人中文字幕视频| 丝袜美女在线观看| 九九久久国产| 色先锋资源久久综合5566| 色网在线免费观看| 精品一二三四区| 97精品视频在线观看自产线路二| 亚洲新声在线观看| 亚洲乱码国产乱码精品精可以看| 久久99亚洲热视| 爱啪啪综合导航| 欧美高清视频一区二区三区在线观看| 久久资源亚洲| 欧美激情一二三区| 影音先锋亚洲电影| 5g影院天天爽成人免费下载| 成人激情免费视频| 日韩国产在线一| 色噜噜狠狠一区二区三区| av漫画网站在线观看| 亚洲高清福利视频| 午夜国产一区| 日本中文字幕一区二区有限公司| 榴莲视频成人app| 久久国产精品色av免费看| y97精品国产97久久久久久| 亚洲第一福利视频在线| 日韩一区二区三区四区五区六区| 国产精品一级久久久| 国产伦久视频在线观看| а√天堂中文在线资源bt在线| www免费视频观看在线| 精品一区二区三区视频在线观看| 亚洲午夜免费视频| 免费精品一区二区三区在线观看| 久久精品这里热有精品| 国产午夜精品一区在线观看| 伊人久久大香线蕉av一区二区| 欧美激情videoshd| 日韩视频一区在线观看| 午夜激情视频在线| 国产精品尤物福利片在线观看| 亚洲精一区二区三区| 国内精品视频| 伊人久久大香线蕉av不卡| 国产日韩精品一区二区| 精品美女久久久久久免费| 国产精品毛片va一区二区三区| 激情欧美一区| 久久久国产精华| 性欧美长视频免费观看不卡| www.av亚洲| 欧美日韩精品在线视频| 99久久精品免费观看| 欧美91看片特黄aaaa| 99热这里都是精品| 日韩三区四区| 麻豆视频在线|