vue 弹窗显示时,底部页面不能滚动,弹窗隐藏时,底部弹窗可以滚动

该代码片段展示了如何在Vue中使用自定义方法stopScroll和canScroll来控制弹出框时页面的滑动行为。stopScroll函数用于禁止页面滑动,通过添加事件监听器阻止touchmove事件的默认行为;而canScroll函数则恢复页面滑动,移除该事件监听器并显示滚动条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//弹出框禁止滑动
Vue.prototype.stopScroll = function () {
  var mo = function (e) { e.preventDefault() }
  document.body.style.overflow = 'hidden'
  document.addEventListener('touchmove', mo, false)// 禁止页面滑动
}
 
//弹出框可以滑动
Vue.prototype.canScroll = function () {
  var mo = function (e) {
    e.preventDefault()
  }
  document.body.style.overflow = ''// 出现滚动条
  document.removeEventListener('touchmove', mo, false)
}

在需要调用的页面调用即可:

 //当需要禁止弹出框底部内容滑动时调用:
  this.stopScroll()
  //当需要页面恢复滑动功能时调用:
  this.canScroll()

可以通过以下步骤实现vue弹窗滚动自动判断显示上下位置: 1. 在弹窗组件中,监听窗口滚动事件,使用`window.addEventListener('scroll', handler)`来监听。 2. 在滚动事件的处理函数中,获取弹窗的位置信息和窗口的滚动距离,计算出弹窗显示位置。 3. 根据弹窗显示位置,动态设置弹窗的样式,使其始终保持在窗口可见区域内。 下面是一个简单的示例代码: ```html <template> <div class="popup" :style="{ top: top + 'px' }"> <!-- 弹窗内容 --> </div> </template> <script> export default { data() { return { top: 0, // 弹窗距离顶部的位置 scrollY: 0 // 窗口滚动距离 }; }, mounted() { window.addEventListener('scroll', this.handleScroll); }, beforeDestroy() { window.removeEventListener('scroll', this.handleScroll); }, methods: { handleScroll() { const popup = this.$el; const popupHeight = popup.offsetHeight; const windowHeight = window.innerHeight; const popupTop = popup.getBoundingClientRect().top + window.pageYOffset; const scrollTop = window.pageYOffset; // 判断弹窗是否超出窗口顶部或底部 if (popupTop < scrollTop) { // 弹窗在窗口上方,向下显示 this.top = scrollTop; } else if (popupTop + popupHeight > scrollTop + windowHeight) { // 弹窗在窗口下方,向上显示 this.top = scrollTop + windowHeight - popupHeight; } else { // 弹窗在窗口内,位置不变 this.top = popupTop; } this.scrollY = scrollTop; } } }; </script> ``` 在这个例子中,我们使用`getBoundingClientRect()`方法获取弹窗的位置信息,使用`window.pageYOffset`获取窗口的滚动距离,然后根据这些信息计算出弹窗应该显示的位置,并将其设置为`top`样式的值。最后,使用`window.addEventListener()`和`window.removeEventListener()`方法来监听和取消监听窗口滚动事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值