您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax |

vue实现内容可滚动的弹窗效果

51自学网 2022-05-02 21:32:38
  javascript

本文实例为大家分享了vue实现内容可滚动的弹窗效果具体代码,供大家参考,具体内容如下

这是第一种实现方式

效果图:

弹窗代码:

Popup.vue

<template lang="html">    <div v-if="show" class="modal-bg" @click="closeModal">      <div class="modal_con">        <div class="modal_content">          <div class="modal-container">            <div class="modal_main">              <p class="modal-header">{{dataList.title}}</p>              <div class="rules_text">                <p                  v-for="(item, index) in dataList.rules"                  class="rules_txt"                  :key="index"                >                  {{ item }}                </p>              </div>          </div>        </div>          <div class="footer_rules">            <div class="tips"></div>              <div class="rules_button">                <div class="button" @click="closeModal">                  <p class="button_text">我知道了</p>                </div>              </div>            </div>        </div>      </div>    </div></template><script>export default {  name: 'Popup',  props: {    show: {      type: Boolean,      default: false    },  },  data () {    return {      dataList: {        rules: [          '1.这是第一条数据啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊',          '2.这是第二条数据啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊',          '3.这是第三条数据啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊',          '4.这是第四条数据啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊'        ],        reward: [          '1.活动规则第一条数据数据数据数据',          '2.活动规则第二条数据数据数据',          '2.活动规则第三条数据数据数据'        ]      }    }  },  methods: {    closeModal () {      this.$emit('closeModal')    },  }}</script><style lang="css" scoped>.modal_con {  width: 80%;  height: 287px;  background: #ffffff;  overflow: hidden;  margin: 0 auto;  position: fixed;  top: 50%;  left: 50%;  transform: translate(-50%, -50%);  border-radius: 8px;}.modal_content {  height: 100%;  background-color: #fff;}.modal-bg {  width: 100%;  height: 100%;  background-color: rgba(0, 0, 0, 0.6);  position: fixed;  top: 0;  left: 0;  z-index: 999;}.modal-container {  height: 78%;  text-align: center;  display: flex;  flex-direction: column;  overflow-y: scroll;  /* ios需要下面这个属性 */  -webkit-overflow-scrolling: touch;}.rules_txt {  font-size: 15px;  font-family: PingFangSC, PingFangSC-Regular;  font-weight: 400;  text-align: justify;  color: #666666;  padding: 0 20px;  margin-top: 8px;  margin-bottom: 0;}.rules_txt:last-child {  padding-bottom: 40px;}.modal-header {  font-size: 17px;  font-family: PingFang, PingFang-SC;  font-weight: bold;  text-align: center;  color: #333333;  margin: 0;  padding-top: 20px;}.reward_title {  font-size: 17px;  font-family: PingFang, PingFang-SC;  font-weight: bold;  text-align: center;  color: #333333;  padding: 0;  margin-top: 14px;  margin-bottom: 6px;}.footer_rules {  width: 100%;  height: 22%;  position: absolute;  bottom: 0;}.tips {  /* width: 100%;  opacity: 0.6;  height: 49px;  background: linear-gradient(180deg, rgba(255, 255, 255, 0.5), #ffffff);  text-align: center;  line-height: 49px;  font-size: 18px; */}.rules_button {  width: 100%;  background: #ffffff;  padding-bottom: 20px;  border-bottom-right-radius: 8px;  border-bottom-left-radius: 8px;}.button {  width: 90%;  display: flex;  justify-content: center;  align-content: center;  background: linear-gradient(270deg, #1283ff, #50a3ff);  border-radius: 4px;  text-align: center;  margin: 0 auto;}.button_text {  font-size: 15px;  font-family: PingFang, PingFang-SC;  font-weight: SC;  color: #ffffff;  display: flex;  justify-content: center;  align-content: center;  margin: 0;  padding: 12px 0;}.rules_con {  padding-bottom: 80px;}</style>

在Home.vue页面使用弹窗:

<!-- 活动规则弹窗 --> <template><div> <div  @click="clickPopup">            <span>点击弹出弹窗</span>          </div> <Popup      v-show="isRulesShow"      @closeModal="isRulesShow = false"      :show="isRulesShow"    >    </Popup></div></template><script>import Popup from './Popup'export default {name:"Home",components: { Popup},data () {    return {      isRulesShow:flase      }    },    watch: {    isRulesShow (v) {      if (v) {        //禁止主页面滑动方法在main.js        this.noScroll()      } else {        //主页面可滑动        this.canScroll()      }    },  },   methods:{ //活动规则弹窗    clickPopup () {      this.isRulesShow = true    }, }}</script>   <style lang="scss" scoped>* {  touch-action: pan-y;}</style>

解决弹窗滚动,里面的body也跟着滚动问题

在main.js中

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

在页面使用时:

//禁止主页面滑动  this.noScroll()//主页面可滑动  this.canScroll()//还要加上样式:* {  touch-action: pan-y;}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持wanshiok.com。


vue实现底部弹窗多选
NodeJS实现图片文本分割
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1