Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲精品二区,久久亚洲高清观看,综合精品在线

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Vue3 學(xué)習(xí)筆記,如何使用 watch 監(jiān)聽數(shù)據(jù)變

          Vue3 學(xué)習(xí)筆記,如何使用 watch 監(jiān)聽數(shù)據(jù)變化(五)

          家好,本篇文章我們繼續(xù)學(xué)習(xí)和 Vue 相關(guān)的內(nèi)容,今天我們歸納總結(jié)下如何使用 watch 監(jiān)聽組件中的數(shù)據(jù)變化,以及 computed 和 watch 的區(qū)別。

          什么是 watch,以及如何使用?

          watch 是 Vue.js 中用于監(jiān)聽數(shù)據(jù)變化的一種機(jī)制。它允許我們?cè)跀?shù)據(jù)發(fā)生變化時(shí)執(zhí)行特定的操作。

          在 Vue 中使用 watch 的方法如下:

          1.在 Vue 組件中,定義一個(gè) watch 對(duì)象,其中包含要監(jiān)聽的數(shù)據(jù)屬性以及對(duì)應(yīng)的回調(diào)函數(shù)。

          watch: {
            dataName: function(newValue, oldValue) {
              // code
            }
          }

          其中,dataName 是要監(jiān)聽的數(shù)據(jù)名稱,newValue 是新的值,oldValue 是舊的值。

          2.在 Vue 實(shí)例中,使用 $watch() 方法進(jìn)行監(jiān)聽

          vm.$watch('someData', function(newVal, oldVal) {
            // do something with newVal
          });
          

          注意:watch 回調(diào)函數(shù)會(huì)在偵聽的數(shù)據(jù)發(fā)生變化時(shí)立即執(zhí)行,而 computed 屬性只有在其依賴的數(shù)據(jù)發(fā)生變化時(shí)才會(huì)計(jì)算。

          watch 通常用于監(jiān)聽一個(gè)數(shù)據(jù)的變化并執(zhí)行復(fù)雜的業(yè)務(wù)邏輯,例如在某個(gè)數(shù)據(jù)變化后需要進(jìn)行 HTTP 請(qǐng)求或者調(diào)用其他函數(shù)。

          下面是一個(gè)簡(jiǎn)單的 watch 的例子:

          <template>
            <div>
              <input v-model="message" type="text" placeholder="請(qǐng)輸入內(nèi)容">
              <p>{{ message }}</p>
            </div>
          </template>
          
          <script>
          export default {
            data() {
              return {
                message: '',
              }
            },
            watch: {
              message: function (newVal, oldVal) {
                console.log('message changed from ' + oldVal + ' to ' + newVal)
              }
            },
          }
          </script>

          在這個(gè)例子中,我們使用了 watch 來監(jiān)聽 message 的變化,并在數(shù)據(jù)變化時(shí)打印出更改前后的值。

          當(dāng)然,watch 還可以接收一個(gè)對(duì)象,其中可以定義多個(gè)監(jiān)聽器。這里有一個(gè)例子,它監(jiān)聽了多個(gè)數(shù)據(jù):

          watch: {
            firstName: function (newVal, oldVal) {
              console.log('firstName changed from ' + oldVal + ' to ' + newVal)
            },
            lastName: function (newVal, oldVal) {
              console.log('lastName changed from ' + oldVal + ' to ' + newVal)
            }
          }

          一些高級(jí)用法介紹

          1、深度觀察 (deep: true):如果你希望對(duì)對(duì)象內(nèi)部屬性的變化進(jìn)行監(jiān)聽,可以使用 deep: true 選項(xiàng)。

          data() {
            user: {
              name: 'John',
              age: 25
            }
          },
          watch: {
            'user.name': function (val) {
              console.log('user name changed:', val)
            }
          }
          

          在這個(gè)例子中,我們監(jiān)聽了 user 對(duì)象中的 name 屬性,當(dāng)該屬性變化時(shí),會(huì)執(zhí)行回調(diào)函數(shù)。

          2、設(shè)置初始值 (immediate: true):如果你希望 watch 在組件創(chuàng)建時(shí)立即執(zhí)行一次,可以使用 immediate: true 選項(xiàng)。

          data() {
              count: 0
          },
          watch: {
              count: {
                  handler: function (val, oldVal) {
                      console.log('count changed');
                  },
                  immediate: true
              }
          }

          3、異步處理 (handler):watch 的回調(diào)函數(shù)是異步執(zhí)行的,這意味著如果有多個(gè)值在短時(shí)間內(nèi)發(fā)生變化,回調(diào)函數(shù)只會(huì)在這些變化結(jié)束后執(zhí)行一次。

          watch: {
            searchText: function (val) {
              this.searching=true
              setTimeout(()=> {
                this.searchData(val)
                this.searching=false
              }, 500)
            }
          }

          在這個(gè)例子中,我們監(jiān)聽了 searchText 屬性,并在數(shù)據(jù)變化后延遲 500 毫秒執(zhí)行搜索操作。

          4、使用 watch 觀察器實(shí)現(xiàn)自動(dòng)保存

          data() {
            content: ''
          },
          watch: {
            content: function (val) {
              localStorage.setItem('content', val)
            }
          }
          

          在這個(gè)例子中,我們監(jiān)聽了 content 屬性,并在數(shù)據(jù)變化時(shí)自動(dòng)保存到本地存儲(chǔ)中。

          應(yīng)用場(chǎng)景介紹

          watch 監(jiān)聽器還有許多其他的應(yīng)用場(chǎng)景,例如:

          • 在表單輸入時(shí)進(jìn)行驗(yàn)證,并顯示錯(cuò)誤消息
          • 在表格中進(jìn)行排序和過濾
          • 在地圖上實(shí)時(shí)顯示用戶位置
          • 監(jiān)聽路由變化并執(zhí)行相應(yīng)操作
          • 監(jiān)聽窗口大小變化并調(diào)整布局
          • 監(jiān)聽滾動(dòng)事件并實(shí)現(xiàn)懶加載
          • ……

          1.在表單輸入時(shí)進(jìn)行驗(yàn)證,并顯示錯(cuò)誤消息

          <template>
            <form>
              <label>
                Email:
                <input v-model="email" @keyup="validateEmail"/>
              </label>
              <p v-if="error">{{ error }}</p>
            </form>
          </template>
          
          <script>
          export default {
            data() {
              return {
                email: '',
                error: ''
              }
            },
            watch: {
              email: {
                immediate: true,
                handler(val) {
                  if (!val.includes('@')) {
                    this.error='Invalid email address'
                  } else {
                    this.error=''
                  }
                }
              }
            }
          }
          </script>
          

          2.在地圖上實(shí)時(shí)顯示用戶位置

          <template>
            <div>
              <div id="map"></div>
            </div>
          </template>
          
          <script>
          export default {
            data() {
              return {
                userLocation: {
                  lat: 0,
                  lng: 0
                },
                map: null
              }
            },
            mounted() {
              this.map=new google.maps.Map(document.getElementById("map"), {
                center: { lat: 0, lng: 0 },
                zoom: 8
              });
              navigator.geolocation.getCurrentPosition(position=> {
                this.userLocation={
                  lat: position.coords.latitude,
                  lng: position.coords.longitude
                }
              });
            },
            watch: {
              userLocation: {
                deep: true,
                handler(val) {
                  this.map.setCenter(val);
                  new google.maps.Marker({
                    position: val,
                    map: this.map
                  });
                }
              }
            }
          }
          </script>

          在這個(gè)示例中,我們使用了 watch 來監(jiān)聽 userLocation 的變化,在用戶位置發(fā)生變化時(shí),使用 setCenter 方法將地圖中心設(shè)置為用戶當(dāng)前位置,并使用 google maps API 在地圖上添加一個(gè)標(biāo)記,顯示用戶當(dāng)前位置。

          注意:這個(gè)例子需要引入 google maps 的 js 文件。

          3、監(jiān)聽路由變化并執(zhí)行相應(yīng)操作

          <template>
            <!-- 省略 -->
          </template>
          
          <script>
          export default {
            watch: {
              $route(to, from) {
                // 根據(jù)路由變化執(zhí)行相應(yīng)操作
                if (to.path==='/home') {
                  this.getHomeData()
                } else if (to.path==='/about') {
                  this.getAboutData()
                }
              }
            },
            methods: {
              getHomeData() {
                // 獲取首頁數(shù)據(jù)
              },
              getAboutData() {
                // 獲取關(guān)于頁數(shù)據(jù)
              }
            }
          }
          </script>

          4、監(jiān)聽窗口大小變化并調(diào)整布局

          <template>
            <!-- 省略 -->
          </template>
          
          <script>
          export default {
            data() {
              return {
                windowWidth: 0
              }
            },
            created() {
              this.windowWidth=window.innerWidth
            },
            watch: {
              windowWidth(newWidth, oldWidth) {
                // 監(jiān)聽窗口大小變化并調(diào)整布局
                if (newWidth < 768) {
                  // 小屏幕布局
                } else {
                  // 大屏幕布局
                }
              }
            },
            mounted() {
              window.addEventListener('resize', ()=> {
                this.windowWidth=window.innerWidth
              })
            }
          }
          </script>

          5、監(jiān)聽滾動(dòng)事件并實(shí)現(xiàn)懶加載

          <template>
            <div class="container" ref="container" @scroll="handleScroll">
              <img v-for="(item, index) in images" :key="index" :src="item.src" v-show="item.isLoaded" />
            </div>
          </template>
          
          <script>
          export default {
            data() {
              return {
                images: [
                  { src: 'image1.jpg', isLoaded: false },
                  { src: 'image2.jpg', isLoaded: false },
                  { src: 'image3.jpg', isLoaded: false },
                  // ...
                ]
              }
            },
            mounted() {
              // 初始化加載第一屏圖片
              this.lazyLoad();
            },
            methods: {
              handleScroll() {
                this.lazyLoad();
              },
              lazyLoad() {
                const container=this.$refs.container;
                const imageList=Array.from(container.querySelectorAll('img'));
                // 遍歷圖片列表,如果圖片進(jìn)入了可視區(qū)域,就加載
                imageList.forEach(img=> {
                  if (this.isInViewport(img)) {
                    img.src=img.dataset.src;
                    img.isLoaded=true;
                  }
                });
              },
              isInViewport(img) {
                // 獲取圖片相對(duì)于視口的位置
                const rect=img.getBoundingClientRect();
                // 判斷圖片是否進(jìn)入了可視區(qū)域
                return rect.top < window.innerHeight && rect.bottom > 0;
              }
            },
            watch: {
              images: {
                handler: function(newVal, oldVal) {
                  // 每當(dāng)圖片加載完成時(shí),就移除已加載圖片的 isLoaded 屬性
                  newVal.forEach((item, index)=> {
                    if (item.isLoaded) {
                      this.$set(this.images[index], 'isLoaded', false);
                    }
                  });
                },
                deep: true
              }
            }
          }
          </script>

          注意:需要注意的是,在這個(gè)案例中,因?yàn)閕mages數(shù)組中的對(duì)象被改變了,所以需要設(shè)置deep: true來監(jiān)聽對(duì)象

          總之,watch 是一個(gè)非常強(qiáng)大和靈活的功能,它可以在數(shù)據(jù)變化時(shí)執(zhí)行任何操作,并且可以與 computed 計(jì)算屬性配合使用,來實(shí)現(xiàn)更復(fù)雜的邏輯。

          computed 和 watch 的區(qū)別

          watch和computed都可以監(jiān)聽Vue實(shí)例中的數(shù)據(jù)變化,但是它們有著明顯的不同。

          watch

          computed

          用于監(jiān)聽某個(gè)特定的數(shù)據(jù)變化。

          用于計(jì)算屬性,可以計(jì)算出一個(gè)新的值。

          每次數(shù)據(jù)變化都會(huì)觸發(fā)回調(diào)函數(shù)。

          僅在相關(guān)依賴發(fā)生改變時(shí)才會(huì)觸發(fā)重新計(jì)算。

          適用于異步操作或復(fù)雜邏輯。

          適用于簡(jiǎn)單計(jì)算。

          不可以在HTML模板中使用

          可以在HTML模板中使用

          沒有返回值

          有返回值/getter

          可以修改data中的數(shù)據(jù)

          也可以使用setters 修改 data 中的數(shù)據(jù)

          總之,如果你需要在數(shù)據(jù)變化時(shí)執(zhí)行異步操作或復(fù)雜邏輯,使用watch是更好的選擇;如果你需要在數(shù)據(jù)變化時(shí)計(jì)算出一個(gè)新值,使用computed是更好的選擇。

          關(guān)于watch的性能

          watch的性能取決于你的代碼實(shí)現(xiàn)方式和監(jiān)聽的數(shù)據(jù)量。

          • 監(jiān)聽的數(shù)據(jù)量:如果你監(jiān)聽了大量的數(shù)據(jù),那么 watch 的性能可能會(huì)受到影響。
          • 代碼實(shí)現(xiàn):如果你在 watch 回調(diào)函數(shù)中執(zhí)行了復(fù)雜的邏輯或異步操作,那么 watch 的性能可能會(huì)受到影響。
          • 如果你只是需要在數(shù)據(jù)變化時(shí)執(zhí)行一些簡(jiǎn)單的操作,那么 watch 的性能應(yīng)該是可以接受的。

          所以,在使用watch時(shí),應(yīng)該注意監(jiān)聽的數(shù)據(jù)量,并且在watch回調(diào)函數(shù)中盡量少執(zhí)行復(fù)雜的邏輯.總之,watch監(jiān)聽數(shù)據(jù)更新并執(zhí)行回調(diào)函數(shù),性能會(huì)受到監(jiān)聽數(shù)據(jù)量和回調(diào)函數(shù)實(shí)現(xiàn)方式的影響,如果有性能問題,應(yīng)該優(yōu)化監(jiān)聽的數(shù)據(jù)量和回調(diào)函數(shù)的實(shí)現(xiàn)方式.

          結(jié)束

          今天的文章就介紹到這里,關(guān)于 watch 的用法你學(xué)會(huì)了,希望今天的文章能幫助到你,感謝你的閱讀。如果你喜歡我的分享,別忘了點(diǎn)贊轉(zhuǎn)發(fā),讓更多的人看到,最后別忘記點(diǎn)個(gè)關(guān)注,你的支持將是我分享最大的動(dòng)力,后續(xù)我會(huì)持續(xù)輸出更多內(nèi)容,敬請(qǐng)期待。

          推薦閱讀

          Vue3 學(xué)習(xí)筆記,Vue 簡(jiǎn)介及如何引入 Vue3 框架(一)

          作者 | 峰華 責(zé)編 | 夢(mèng)依丹
          出品 | 峰華的個(gè)人博客

          在前端這個(gè)無奇不有的世界里,有些網(wǎng)站不是正常垂直滾動(dòng)的,而是橫向滾動(dòng)的:


          那么在沒法把鼠標(biāo)滾輪橫過來的前提下(蘋果除外),能否實(shí)現(xiàn)網(wǎng)頁橫向滾動(dòng)呢?我們來寫代碼試試。先看一下最終效果,這里我用鼠標(biāo)的滾輪垂直滾動(dòng),頁面是橫向滾動(dòng)的。

          要實(shí)現(xiàn)這個(gè)功能,只需要一點(diǎn)點(diǎn)的 JS 代碼。


          編寫 HTML 結(jié)構(gòu)


          先看一下 HTML 結(jié)構(gòu),很簡(jiǎn)單,就是三個(gè)模擬全屏頁面的 div,class 都是 page,然后放在一個(gè) class 名為 container 的 div 容器中:

          • <main> <div class="container"> <div class="page">Page1</div> <div class="page">Page2</div> <div class="page">Page3</div> </div></main>


            編寫 CSS 樣式

            對(duì)于樣式,container 容器設(shè)置為 flex 布局,并且顯示橫向滾動(dòng)條:

            • .container { display: flex; overflow-x: scroll;}

              里面每一個(gè)頁面元素的寬高都設(shè)置為占滿瀏覽器可視區(qū)域的 100%,并且在 flex 布局中,不自動(dòng)收縮,再分別給他們?cè)O(shè)置不同的背景色,用于區(qū)分:

              • .page { width: 100vw; height: 100vh; flex-shrink: 0;}
                .page:nth-child(1) { background: hsl(140deg, 50%, 50%);}
                .page:nth-child(2) { background: hsl(210deg, 50%, 50%);}
                .page:nth-child(3) { background: hsl(270deg, 50%, 50%);}


                實(shí)現(xiàn)橫向滾動(dòng)


                接下來我們使用 JS 實(shí)現(xiàn)橫向滾動(dòng),首先獲取 container 容器:

                let container=document.querySelector(".container");

                給它添加一個(gè) “wheel” 事件,這個(gè)是監(jiān)聽鼠標(biāo)滾輪的滾動(dòng),在滾動(dòng)時(shí),先阻止默認(rèn)的滾動(dòng)事件,然后讓容器水平橫向移動(dòng),這里利用到了 scrollLeft 屬性,讓容器的內(nèi)容向左移動(dòng),這里只需要加上滾輪垂直滾動(dòng)的距離差值就可以了,也就是 event 對(duì)象中的 deltaY 屬性:

                • container.addEventListener("wheel", (event)=> { event.preventDefault(); container.scrollLeft +=event.deltaY;});


                  兼容性

                  wheel 事件的兼容性可以參考 caniuse 提供的數(shù)據(jù):


                  總結(jié)

                  這樣就實(shí)現(xiàn)橫向滾動(dòng)了,重點(diǎn)是利用了 “wheel” 事件監(jiān)聽鼠標(biāo)滾輪滾動(dòng),然后獲取滾動(dòng)距離差值,把它加到可以滾動(dòng)的容器的 scrollLeft 屬性中,你學(xué)會(huì)了嗎?

                  源碼地址:https://github.com/zxuqian/html-css-examples/tree/master/38-horizontal-scrolling

                  原文地址:https://zxuqian.cn/docs/videos/effects/js-horizontal-scroll-effect/

          021年你需要知道的HTML標(biāo)簽和屬性

          Web開發(fā)人員都在廣泛的使用HTML。無論你使用什么框架或者選擇哪個(gè)后端語言,框架在變,但是HTML始終如一。盡管被廣泛使用,但還是有一些標(biāo)簽或者屬性是大部分開發(fā)者不熟知的。雖然現(xiàn)在有很多的模版引擎供我們使用,但是樂字節(jié)教育的老師和我們說還是需要盡可能的熟練掌握HTML內(nèi)容,就像CSS一樣。

          在我看來,最好盡可能使用HTML特性來實(shí)現(xiàn)我們的功能,而不是使用JavaScript實(shí)現(xiàn)相同的功能,盡管我承認(rèn)編寫HTML可能會(huì)是重復(fù)的和無聊的。

          盡管許多開發(fā)人員每天都在使用HTML,但他們并沒有嘗試改進(jìn)自己的項(xiàng)目,也沒有真正利用HTML的一些鮮為人知的特性。

          下面這5個(gè)通過HTML標(biāo)簽/屬性實(shí)現(xiàn)的功能我覺得需要了解一下:

          圖片懶加載

          圖片懶加載可以幫助提升網(wǎng)站的性能和響應(yīng)能力。圖片懶加載可以避免立即加載那些不在屏幕中立即顯示的圖片素材,當(dāng)用戶滾動(dòng)臨近圖片時(shí)再去開始加載。

          換言之,當(dāng)用戶滾動(dòng)到圖片出現(xiàn)時(shí)再進(jìn)行加載,否則不加載。這就降低了屏幕內(nèi)容展示過程中的圖片素材的請(qǐng)求數(shù)量,提升了站點(diǎn)性能。

          往往我們都是通過javascript來實(shí)現(xiàn)的,通過監(jiān)聽頁面滾動(dòng)事件來確定加載對(duì)應(yīng)的資源。但是,在不完全考慮兼容性的場(chǎng)景下,我們其實(shí)可以直接通過HTML來直接實(shí)現(xiàn)。

          注:本篇的提到的標(biāo)簽和屬性的兼容性需要大家根據(jù)實(shí)際場(chǎng)景來選取是否使用

          可以通過為圖片文件添加loading="lazy"的屬性來實(shí)現(xiàn):


          輸入提示

          當(dāng)用戶在進(jìn)行輸入搜索功能時(shí),如果能夠給出有效的提示,這會(huì)大大提升用戶體驗(yàn)。輸入建議和自動(dòng)完成功能現(xiàn)在到處可見,我們可以使用Javascript添加輸入建議,方法是在輸入框上設(shè)置事件偵聽器,然后將搜索到的關(guān)鍵詞與預(yù)定義的建議相匹配。

          其實(shí),HTML也是能夠讓我們來實(shí)現(xiàn)預(yù)定義輸入建議功能的,通過<datalist>標(biāo)簽來實(shí)現(xiàn)。需要注意的是,使用時(shí)這個(gè)標(biāo)簽的id屬性需要和input元素的list屬性一致。


          Picture標(biāo)簽

          你是否遇到過在不同場(chǎng)景或者不同尺寸的設(shè)備上面的時(shí)候,圖片展示適配問題呢?我想大家都遇到過。

          針對(duì)只有一個(gè)尺寸的圖片素材的時(shí)候,我們往往可以通過CSS的object-fit屬性來進(jìn)行裁切適配。但是有些時(shí)候需要針對(duì)不同的分辨率來顯示不同尺寸的圖片的場(chǎng)景的時(shí)候,我們是否可以直接通過HTML來實(shí)現(xiàn)呢?

          HTML提供了<picture>標(biāo)簽,允許我們來添加多張圖片資源,并且根據(jù)不同的分辨率需求來展示不同的圖片。


          我們可以定義不同區(qū)間的最小分辨率來確定圖片素材,這個(gè)標(biāo)簽的使用有些類似<audio>和<video>標(biāo)簽。

          Base URL

          當(dāng)我們的頁面有大量的錨點(diǎn)跳轉(zhuǎn)或者靜態(tài)資源加載時(shí),并且這些跳轉(zhuǎn)或者資源都在統(tǒng)一的域名的場(chǎng)景時(shí),我們可以通過<base>標(biāo)簽來簡(jiǎn)化這個(gè)處理。

          例如,我們有一個(gè)列表需要跳轉(zhuǎn)到微博的不同大V的主頁,我們就可以通過設(shè)置來簡(jiǎn)化跳轉(zhuǎn)路徑


          <base>標(biāo)記必須具有href和target屬性。

          頁面重定向(刷新)

          當(dāng)我們希望實(shí)現(xiàn)一段時(shí)間后或者是立即重定向到另一個(gè)頁面的功能時(shí),我們可以直接通過HTML來實(shí)現(xiàn)。

          我們經(jīng)常會(huì)遇到有些站點(diǎn)會(huì)有這樣一個(gè)功能,“5s后頁面將跳轉(zhuǎn)”。這個(gè)交互可以嵌入到HTML中,直接通過<meta>標(biāo)簽,設(shè)置http-equiv="refresh"來實(shí)現(xiàn)


          這里content屬性指定了重定向發(fā)生的秒數(shù)。值得一提的是,盡管谷歌聲稱這種形式的重定向和其他的重定向方式一樣可用,但是使用這種類型的重定向其實(shí)并不是那么的優(yōu)雅,往往會(huì)顯得很突兀。

          因此,最好在某些特殊的情況下使用它,比如在長(zhǎng)時(shí)間用戶不活動(dòng)之后再重定向到目標(biāo)頁面。

          后記

          HTML和CSS是非常強(qiáng)大的,哪怕我們僅僅使用這兩種技術(shù)也能創(chuàng)建出一些奇妙的網(wǎng)站。雖然它們的使用量很大很普遍,還是有很多的開發(fā)者并沒有真正的深入了解他們,還有很多的內(nèi)容需要我們深入的去學(xué)習(xí)和理解,實(shí)踐,有很多的技巧等待著我們?nèi)グl(fā)現(xiàn)。

          文章轉(zhuǎn)載至樂字節(jié)

          最后給大家推薦幾個(gè)b站超詳細(xì)的Java自學(xué)課:

          Servlet入門教程BV1D5411373E

          Vue、Vuejs教程,BV19V41177od

          SpringBoot+Vue項(xiàng)目實(shí)戰(zhàn)BV1o64y117qQ


          主站蜘蛛池模板: 波多野结衣av高清一区二区三区| 搜日本一区二区三区免费高清视频 | 国产精品特级毛片一区二区三区| 在线精品一区二区三区| 三上悠亚精品一区二区久久| 鲁大师成人一区二区三区| 国精产品999一区二区三区有限| 91在线看片一区国产| 久久久老熟女一区二区三区| 福利一区二区三区视频在线观看| 成人日韩熟女高清视频一区| 久久99精品免费一区二区| 一区二区三区视频网站| 日韩国产一区二区| 好吊妞视频一区二区| 日韩免费一区二区三区| 99偷拍视频精品一区二区| 亚洲一区综合在线播放| 亚洲一区二区在线视频| 日本精品一区二区三区在线观看| 丰满岳妇乱一区二区三区| 国产一区二区视频免费| 男人免费视频一区二区在线观看 | 一区二区视频传媒有限公司| 精品国产一区二区三区2021| 亚洲国产一区二区三区| 一区在线观看视频| 在线精品亚洲一区二区三区| 台湾无码AV一区二区三区| 日韩欧国产精品一区综合无码| 久久精品无码一区二区三区| 无码日韩精品一区二区三区免费| 亚洲一区在线视频| 日韩一区二区三区免费体验| 美女免费视频一区二区| 成人精品视频一区二区三区不卡| 久久免费区一区二区三波多野| 国产99视频精品一区| 精品一区二区三区电影| 国产在线精品一区二区在线观看| 亚洲一区二区三区高清|