防止在 VueJS 中滚动

Ang*_* L. 6 javascript jquery vue.js vue-component vue-cli

我试图仅在灯箱组件打开时防止滚动,但似乎无法这样做。我希望不要使用任何外部库或插件来做到这一点。

我的 App.vue 包含“LightBox”组件,所以我假设防止滚动功能也应该存在于 App.vue 中。App.vue 片段:

<template>
  <div class="SocialAlbumWidget">
    <div v-if="isModalVisible && media[activeIndex]">
      <LightBox
        ...
      />
Run Code Online (Sandbox Code Playgroud)

我目前在“方法”部分有一个“showModal()”函数,所以想通过另一个函数传递它。

方法:

mothods: {
...
showModal () {
  this.isModalVisible = true
},
closeModal () {
  this.isModalVisible = false
}
Run Code Online (Sandbox Code Playgroud)

我希望主体在“灯箱”组件关闭时能够滚动,而在“灯箱”组件打开时则被禁用。谢谢!让我知道哪些其他代码会有用。

Ran*_*ala 18

LightBox 防止模态本身的滚动事件-

<LightBox
 @wheel.prevent
 @touchmove.prevent
 @scroll.prevent
/>
Run Code Online (Sandbox Code Playgroud)

风格overflow: hidden可能会引起一些担忧。

例如;

  • 滚动条的可见性
  • UI 弹跳w.e.f溢出切换


Cha*_*lie 10

您可以使用观察者对变化做出反应isModalVisible并使用style="overflow: hidden".

沿着这些路线的东西:

// HTML
<btn @click="dialog = !dialog" >Click Me </btn>

// JS
new Vue({
  el: '#app',
  data () {
    return {
      dialog: false,
    }
  },
  watch: {
    isModalVisible: function() {
      if(this.isModalVisible){
        document.documentElement.style.overflow = 'hidden'
        return
      }

      document.documentElement.style.overflow = 'auto'
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

  • 这在 ios 设备上不起作用。您需要固定内容并观察页面滚动位置,然后将负位置顶部添加到固定换行中。之后,当滚动打开时,你需要在js上使用scrollTop()到上一个位置。 (2认同)