【问题标题】:how to open and close a popup with same button / and hover issues如何使用相同的按钮/和悬停问题打开和关闭弹出窗口
【发布时间】:2021-09-03 02:26:22
【问题描述】:

我正在拼命尝试创建一个按钮,当您单击一个弹出窗口时,它会出现,而当您再次单击它时,弹出窗口就会消失。

除此之外,我还试图在单击时使(按钮的)文本为 stricktrhough,在弹出窗口存在时保持 stricktrhough,当您再次单击它并且弹出窗口消失时恢复其原始状态.. .

但是我的编码太新了,我遇到了很多麻烦。有人帮我吗?

我在这里……

在 index.html 中


<button id="btnPopup" class="btnPopup">X</button>
<div id="overlay" class="overlay">
    <div id="popup" class="popup">
           <span id="btnClose" class="btnClose">&times;</span>
       <p>Text in popup 
       </p>
   </div>
</div>
<script src="script.js"></script>


在 style.css 中


/* BOUTON */

.btnPopup{
   background-color:white;
   border: none;
   font-size: 60pt;
   font-size: max(5vw,35px);
   color:black;
   cursor: pointer;
   display: inline-block;
   position: relative;
}

.overlay{
   position: fixed;
   left:5px;
   top:0px;
   font-size: 20pt;
   color: white;
   width:40%;
   height: 60%;
   display: none;
   z-index: 8;
}

@media only screen and (max-width: 600px) {
   .popup{
       width:20%;
    }
  }
.popup{

   margin:20% auto;
   width:90%;
   max-width: 800px;
   min-width: 300px;
   background-color: blue;
   padding: 1em;
}

.btnClose {
   float: right;
   cursor: pointer;
} 

/* BOUTON hover */


.btnPopup::after{
   content:'';
   display:block;
   width:0%;
   height: 10px;
   background:black;
   position: absolute;
   bottom: 45%;
   -webkit-transition: width 0.5s;
   -moz-transition: width 0.5s;
   -o-transition: width 0.5s;
  transition: width 0.5s;
}

.btnPopup:hover::after{
  width:100%;

} 

在 script.js 中


var btnPopup = document.getElementById('btnPopup');
var overlay = document.getElementById('overlay');
var btnClose = document.getElementById('btnClose');

btnPopup.addEventListener('click',openModal);
btnClose.addEventListener('click',closePopup)

function openModal(){
 overlay.style.display = 'block';

}

function closePopup(){
 overlay.style.display = 'none';
}


【问题讨论】:

  • 您的 css 无效。请更新它。
  • 你的代码不完整,不仅仅是css,html也有错误,js不完整btnPopup参考

标签: javascript html jquery css web


【解决方案1】:

您可以在弹出窗口打开/关闭时动态添加/删除 。希望对您有所帮助。

$('#btnPopup').on('click', function(e)  {
  var btnPopup = document.getElementById('btnPopup');
  var overlay = document.getElementById('overlay');
  var btnClose = document.getElementById('btnClose');
  
  if(!$(this).hasClass("opened")){
    //code for open & strikethrough
    overlay.style.display = 'block';
    $(this).addClass("opened strike");
  }else{
    //code for close & original state
    $(this).removeClass("opened strike");
    overlay.style.display = 'none';
  }  
});
/* BOUTON */

.btnPopup{
   background-color:white;
   border: none;
   font-size: 60pt;
   font-size: max(5vw,35px);
   color:black;
   cursor: pointer;
   display: inline-block;
   position: relative;
}

.overlay{
   font-size: 20pt;
   color: white;
   width:40%;
   height: 60%;
   display: none;
   z-index: 8;
}

.popup{
   background-color: blue;
   padding: 1em;
}

.btnClose {
   float: right;
   cursor: pointer;
} 

/* BOUTON hover */

.btnPopup:hover:{
  cursor:pointer;
} 

.strike{
  text-decoration: line-through;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="btnPopup" class="btnPopup">X</button>
<div id="overlay" class="overlay">
    <div id="popup" class="popup">
       <p>Text in popup 
       </p>
   </div>
</div>
<script src="script.js"></script>

【讨论】:

  • 谢谢!这似乎是一个不错的解决方案!稍微精确一点(对不起,我是新来的:S)在这种情况下,删除线的代码也必须是 javascript,或者也可以是 Css?
  • 没问题。你可以把它写在你的 CSS 中。您可以简单地为“罢工”课程写下您的删除线。在上面的代码中,它会在弹出窗口出现时添加“strike”类。我添加了一个代码 sn-p 来展示它是如何工作的。这是你要找的吗?
  • 好的,当您遇到其他问题时请告诉我。
【解决方案2】:

如果您要使用一个简单的dataset 属性值为零,您可以做一个简单的小技巧 (1 - dataset.state) 来切换该数据集属性的状态,从而控制popup

我读到 cmets 关于 CSS 无效但没有关注这一点 - 只是 javascript 逻辑。

document.querySelector('button').addEventListener('click',function(e){
  this.dataset.state=1-this.dataset.state;
  this.nextElementSibling.style.display=Number(this.dataset.state)==1 ? 'block' : 'none';
});
.btnPopup{
    background-color:white;
    border: none; 
    font-size: 60pt;
    font-size: max(5vw,35px);
    color:black;
    cursor: pointer;
    display: inline-block;
    position: relative;
}

.overlay{
    position: fixed;
    left:5px;
    top:25px;
    font-size: 20pt;
    color: white;
    width:40%;
    height: 60%;
    display: none;
    z-index: 8;
}


.popup{

    margin:20% auto;
    width:90%;
    max-width: 800px;
    min-width: 300px;
    background-color: blue;
    padding: 1em;
}


/* BOUTON hover */


.btnPopup::after{
    content:'';
    display:block;
    width:0%;
    height: 10px;
    background:black;
    position: absolute;
    bottom: 45%;
    -webkit-transition: width 0.5s;
    -moz-transition: width 0.5s;
    -o-transition: width 0.5s;
   transition: width 0.5s;
}

.btnPopup:hover::after{
   width:100%;

}
<button class="btnPopup" data-state=0>X</button>
<div class="overlay">
   <div class="popup">     
      <p>Text in popup</p>
  </div>
</div>

您也可以完全省略dataset 属性的使用,而使用类似以下内容:

this.nextElementSibling.style.display=this.nextElementSibling.style.display=='block' ? 'none' : 'block'

【讨论】:

  • 太棒了,谢谢!我不知道这个功能(还有很多要学:))只是一个精度,为什么关闭弹出窗口只能点击按钮的顶部,而不是整个X都可以点击?按钮的可点击区域在关闭弹出窗口时似乎比打开它时要小。
  • 我认为这是因为您的 css 中的设置
猜你喜欢
  • 2014-03-16
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多