(Vue.js) 在模式中滚动也会滚动模式的背面

新手上路,请多包涵

单击图像会弹出一个长长的滚动模式。问题是,如果您在模态中滚动,也会滚动模态的背面。你是怎么解决的?

模态是一个组件。这是我的代码:

轮播.vue

 <template>
  <div>
    <div v-for="(item, index) in photos" :key="index">
      <div @click="imgClick(item)" style="cursor:pointer;">
        <img :src="item.thumbnail" />
      </div>
      <Modal v-if='item.show' @close="item.show = false">
        <div slot='body'>
          <img :src="item.thumbnail" :class="`img-index--${index}`"/>
        </div>
      </Modal>
    </div>
  </div>
</template>

<script>
import Modal from './Modal.vue'
export default {
  props: {
    items: { type: Array, default: () => [] }
  },
  data() {
    return {
      photos: {}
    }
  },
  created() {
    this.photos = this.items.map(item => {
      return { ...item, show: false }
    })
  },
  methods: {
    imgClick(item) {
      item.show = true
    }
  },
  components: {
    Modal: Modal
  }
}
</script>

原文由 ddon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 325
2 个回答

大多数模式包通过在打开模式时将类应用于 <body> 标记来解决此问题。例如, <body class="modal-open"> 。然后在您应用程序的 CSS 中,您可以添加此规则:

 body.modal-open {
  overflow: hidden;
}

这将使模式后面的页面不再可滚动。

无论您使用哪个模态包,都可能在模态打开或关闭时触发事件。 You can apply this class to the <body> tag in the open event handler, and remove the class from the <body> tag in the close 事件处理程序。


更新

根据您添加的代码,您可以通过以下方式在 <body> 标签上切换 modal-open 类:

 ...

<div @click="showModal(item)" style="cursor:pointer;">
  <img :src="item.thumbnail" />
</div>
<Modal v-if='item.show' @close="hideModal(item)">
  <div slot='body'>
    <img :src="item.thumbnail" :class="`img-index--${index}`"/>
  </div>
</Modal>

...

{
...

methods: {
  showModal(item) {
    item.show = true
    document.body.classList.add("modal-open");
  },
  hideModal(item) {
    item.show = false;
    document.body.classList.remove("modal-open");
  }
},

...
}

请参阅此 jsFiddle 以供参考。

原文由 Vince 发布,翻译遵循 CC BY-SA 4.0 许可协议

我看不到您的特定代码正在运行,但您通常可以通过在打开模式时将页面主体设置为“溢出:隐藏”来解决此问题。为了让它更优雅,检查页面是否有滚动条,并在右侧添加一些边距以防止内容移动。我过去使用过 这个滚动条检测,但如果我今天使用它,我会把它减少到最低限度……我不再关心旧的 IE。

原文由 TimHayes 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题