最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue解決彈出蒙層滑動穿透問題的方法

 更新時間:2018年09月22日 11:45:05   作者:布爾-  
這篇文章主要介紹了vue解決彈出蒙層滑動穿透問題的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近開發(fā)過程中遇到一些小問題(似乎問題總是那么多),但一直沒什么時間去優(yōu)化與解決。程序員不能被業(yè)務(wù)綁架,有時間還是花點在代碼上😀,開始這次的vue嘗試吧。

【遇到的問題】

在一個可滑動列表頁彈出一個全屏蒙層,蒙層固定,中間一塊顯示消息框,當(dāng)用手滑動蒙層空白處時,滑動事件會穿透到底部列表頁,導(dǎo)致列表頁的滑動。

【要實現(xiàn)的目標】

1. 滑動蒙層空白處不讓滑動事件穿透。  

2. 當(dāng)蒙層消息框文字多時,要讓文字可上下滑動。

要實現(xiàn)的效果其實如下:

【實現(xiàn)思路】

1. vue提供的@touchmove.prevent可以用來阻止滑動,但是這個方法會對其內(nèi)的子div的滑動事件也禁止掉了,這樣會導(dǎo)致中間文字無法滑動。如果沒有中間滑動需求,用@touchmove.prevent實現(xiàn)是一個很好的方法。

2. 蒙層設(shè)為fixed懸浮在最上,底部列表設(shè)置overflow-y: hidden;這樣可以列表內(nèi)容就不可以滑了,但實際過程中沒有效果,于是想到繼續(xù)往列表父div向上追溯,對body和html標簽設(shè)置相關(guān)樣式,這樣就控制住了底部列表滑動問題。

3. 蒙層空白處點擊事件與中間文字點擊事件處理,防止事件冒泡帶來其他bug。

【相關(guān)實現(xiàn)代碼】

1. html代碼都是比較簡單,列表頁for循環(huán)實現(xiàn);蒙層用一個變量控制其顯示和隱藏。但這里有幾個注意點: a. 給上面列表的div動態(tài)綁定了noScroll class,它的作用是當(dāng)消息蒙層顯示時切換到相關(guān)的css樣式; b. 彈出的全屏蒙層,加有點擊事件是為了點空白處讓蒙層消失,但這里對顯示的每行文字還加了@click.stop="messageTitleClick(num)"這個方法,為什么加它呢——是因為蒙層空白處的點擊方法對整個蒙層都生效,在文字上加上這個方法可以屏蔽掉蒙層點擊方法的影響,即使這個方法里什么也不做它也是有作用的,另外這個方法上加了stop是為了防止它的點擊事件穿透到后面的div。代碼如下:

<!-- 列表 -->
 <div :class="{noScroll: isShowPopup}">
  <div class="item" v-for="num in 50" @click="itemClick(num)">
  <div style="width:100%">點擊item{{num}}</div>
  </div>
 </div>

   <!-- 蒙層 -->
 <div v-if="isShowPopup" class="popup" @click="popUpEmptyClick()">
  <div class="message">
  <p class="message-title" v-for="num in 30" @click.stop="messageTitleClick(num)">
   消息提示 {{num}}
  </p>
  </div>
 </div>

2. 給整個列表動態(tài)綁定的css如下

/* 當(dāng)前蒙層顯示時生效 */
.noScroll {
 overflow-y: hidden;
}

3. 給列表整個div動態(tài)綁定.noScroll 后,底部列表照樣可以滑動,所以考慮繼續(xù)向上追溯。利用watch監(jiān)聽蒙層是否顯示,當(dāng)顯示時,設(shè)置body相應(yīng)樣式;但蒙層消失時,body樣式恢復(fù)。但是在vue里怎么操作body里,雖然vue是數(shù)據(jù)驅(qū)動的,不提倡直接操作Dom。但此刻我也是沒什么好辦法了,就直接操作Dom了。如下:

watch: {
 isShowPopup(newVal, oldVal) {
  if (newVal == true) {
  let cssStr = "overflow-y: hidden; height: 100%;";
  document.getElementsByTagName('html')[0].style.cssText = cssStr;
  document.body.style.cssText = cssStr;
  } else {
  let cssStr = "overflow-y: auto; height: auto;";
  document.getElementsByTagName('html')[0].style.cssText = cssStr;
  document.body.style.cssText = cssStr;
  }

  // 下面需要這兩行代碼,兼容不同瀏覽器
  document.body.scrollTop = this.pageScrollYoffset;
  window.scroll(0, this.pageScrollYoffset);
 }
 }

【補充】

最好去查看完整的demo代碼,因為后續(xù)代碼對真機上一些滑動問題進行了修復(fù)補充,包括處理一些滾動條位置等。

【Demo地址】

手動將路由切到 /three 就是此頁示例

https://github.com/LiJinShi/wechat_back_vue

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vite創(chuàng)建項目的實現(xiàn)步驟

    Vite創(chuàng)建項目的實現(xiàn)步驟

    隨著 Vite2 的發(fā)布并日趨穩(wěn)定,現(xiàn)在越來越多的項目開始嘗試使用它。本文我們就介紹了Vite創(chuàng)建項目的實現(xiàn)步驟,感興趣的可以了解一下
    2021-07-07
  • VUE腳手架框架編寫簡潔的登錄界面的實現(xiàn)

    VUE腳手架框架編寫簡潔的登錄界面的實現(xiàn)

    本文主要介紹了VUE腳手架框架編寫簡潔的登錄界面的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解在Vue.js編寫更好的v-for循環(huán)的6種技巧

    詳解在Vue.js編寫更好的v-for循環(huán)的6種技巧

    這篇文章主要介紹了詳解在Vue.js編寫更好的v-for循環(huán)的6種技巧,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Vue3-KeepAlive,多個頁面使用keepalive方式

    Vue3-KeepAlive,多個頁面使用keepalive方式

    這篇文章主要介紹了Vue3-KeepAlive,多個頁面使用keepalive方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 深入理解vue-class-component源碼閱讀

    深入理解vue-class-component源碼閱讀

    這篇文章主要介紹了深入理解vue-class-component源碼閱讀,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • vue項目打包后網(wǎng)頁的title亂碼解決方案

    vue項目打包后網(wǎng)頁的title亂碼解決方案

    這篇文章主要介紹了vue項目打包后網(wǎng)頁的title亂碼解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue項目開發(fā)實現(xiàn)父組件與子組件數(shù)據(jù)間的雙向綁定原理及適用場景

    Vue項目開發(fā)實現(xiàn)父組件與子組件數(shù)據(jù)間的雙向綁定原理及適用場景

    在 Vue.js 中,實現(xiàn)父組件與子組件數(shù)據(jù)之間的雙向綁定,可以通過以下幾種方式,下面我將介紹幾種常見的方法,并解釋它們的實現(xiàn)原理和適用場景,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • vue+elementUI中el-radio設(shè)置默認值方式

    vue+elementUI中el-radio設(shè)置默認值方式

    這篇文章主要介紹了vue+elementUI中el-radio設(shè)置默認值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vue2之vue.config.js最全配置教程

    vue2之vue.config.js最全配置教程

    本文主要介紹了vue2之vue.config.js最全配置教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • vue3 源碼解讀之 time slicing的使用方法

    vue3 源碼解讀之 time slicing的使用方法

    這篇文章主要介紹了vue3 源碼解讀之 time slicing的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論

江安县| 佳木斯市| 繁昌县| 阳东县| 皋兰县| 鄢陵县| 伊宁县| 阿拉善左旗| 宁城县| 龙陵县| 哈尔滨市| 五常市| 柘城县| 青铜峡市| 随州市| 晋江市| 黎平县| 林口县| 武邑县| 惠水县| 辽中县| 西乌| 梧州市| 台东县| 武鸣县| 尚志市| 洪洞县| 边坝县| 于都县| 广南县| 龙岩市| 邵东县| 伽师县| 玉山县| 隆安县| 凤山县| 晋中市| 兴化市| 本溪市| 忻州市| 龙游县|