在页面加载时隐藏 div/popup 直到单击按钮

Posted

技术标签:

【中文标题】在页面加载时隐藏 div/popup 直到单击按钮【英文标题】:Hiding div/popup on page load until button click 【发布时间】:2021-10-30 02:20:04 【问题描述】:

我在 Vue 中有一个工作模式,但是,模式在页面加载时会在瞬间加载为空,我希望它保持完全隐藏(即使在页面加载时),直到单击按钮。

我在 CSS 中使用 display:none 进行了测试,它可以在页面加载时隐藏它,但是当按下按钮时它仍然完全隐藏。我试图通过将条件样式绑定到 div 来解决这个问题,但仍然没有运气。

如何通过单击按钮保持此模式的功能,同时允许它在页面加载时显示:无?

var vm = new Vue(
  el: "#app",
  props: ,
  data: 
    showDetailModal: false,
  ,
  methods: 
    openModal() 
      console.log(this.showDetailModal);
      this.showDetailModal = true;
      console.log(this.showDetailModal);
    
  ,
);
.modal-vue .overlay 
  //display: none;
  text-align: center;
  position: fixed;
  z-index: 9998;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, .5);


.modal-vue .modal 
  //display: none;
  position: relative;
  width: 300px;
  z-index: 9999;
  margin: 0 auto;
  padding: 20px 30px;
  background-color: #fff;


.modal-vue .close 
  position: absolute;
  top: 10px;
  right: 10px;
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">

  <div @click="openModal()">
    Open Modal
  </div>

  <div class="modal-vue" v-if="showDetailModal" :style="'display: ' + (showDetailModal ? 'block' : 'none')">
    <!-- overlay to help with readability of modal -->
    <div class="overlay" @click="showDetailModal = false"></div>

    <!-- Modal for detail on table cell click event -->
    <div class="modal" v-if="showDetailModal">
      <button class="close" @click="showDetailModal = false">x</button>
      <h3>Testing</h3>
    </div>
  </div>

</div>

【问题讨论】:

我在 Chrome 中根本看不到加载模式 它没有出现在 sn-p 中,但它出现在我的网站上。我把 sn-p 放在上面来表明,如果你取消注释 display:none 从 CSS 那么它就不会显示,所以我想要实现的是模态在按钮点击时仍然显示,同时显示:none 在页面加载时设置 【参考方案1】:

我认为问题在于您在 .modal-vue 上更改了 :style="'display: ' + (showDetailModal ? 'block' : 'none')",但在您的 CSS 中将 display: none 定义为 .modal-vue .modal

所以你应该这样定义它:

.modal-vue 
  display: none;

工作示例:

var vm = new Vue(
  el: "#app",
  props: ,
  data: 
    showDetailModal: false,
  ,
  methods: 
    openModal() 
      console.log(this.showDetailModal);
      this.showDetailModal = true;
      console.log(this.showDetailModal);
    
  ,
);
.modal-vue .overlay 
  //display: none;
  text-align: center;
  position: fixed;
  z-index: 9998;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, .5);


.modal-vue 
  display: none;


.modal-vue .modal 
  position: relative;
  width: 300px;
  z-index: 9999;
  margin: 0 auto;
  padding: 20px 30px;
  background-color: #fff;


.modal-vue .close 
  position: absolute;
  top: 10px;
  right: 10px;
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">

  <div @click="openModal()">
    Open Modal
  </div>

  <div class="modal-vue" v-if="showDetailModal" :style="'display: ' + (showDetailModal ? 'block' : 'none')">
    <!-- overlay to help with readability of modal -->
    <div class="overlay" @click="showDetailModal = false"></div>

    <!-- Modal for detail on table cell click event -->
    <div class="modal" v-if="showDetailModal">
      <button class="close" @click="showDetailModal = false">x</button>
      <h3>Testing</h3>
    </div>
  </div>

</div>

【讨论】:

以上是关于在页面加载时隐藏 div/popup 直到单击按钮的主要内容,如果未能解决你的问题,请参考以下文章

显示隐藏的html代码的按钮?

Div 在使用 ajax 和 django 进行第二次点击后显示/隐藏

使 iFrame 在页面启动时不加载

在单击按钮之前不要加载 JavaScript 标记

jQuery - 响应式面板

Sikuli如何用于等待按钮,直到它显示它然后单击它?