JavaScript 实现恶意弹窗:点击关闭后自动重现的完整代码解析

作者:青柠时间:2026-10-30 17:25:11浏览:474

本文详细解析如何利用 JavaScript 实现一个点击关闭后会自动重现的弹窗效果。通过 HTML 构建弹窗结构,CSS 进行样式布局,并结合 JS 的 setTimeout 定时器与 DOM 事件监听,实现关闭按钮点击后隐藏弹窗并在3秒后重新显示的功能。代码包含完整的 HTML 结构、CSS 样式及 JS 逻辑,适用于学习前端交互与恶意广告模拟场景。

引言:恶意弹窗现象与原理概述

你是否曾在浏览网页时遇到过这样的恶意广告:无论你怎么点击关闭,它都会再次出现?这种令人困扰的体验背后,其实是 JavaScript 在起作用。本文将深入解析其实现原理。

HTML 结构构建

首先,我们需要构建弹窗的 HTML 结构。核心是一个包含关闭按钮和快捷操作链接的容器。


<body>
  <h3 class="whiteColor">无法关闭的弹框,打不死的小强!</h3>
  <div id="middleBox">
    <a href="javascript:;" class="close_btn" id="closeBtn"><img src="images/close_icon.png" alt="" class="will_close"></a>
    <ul class="parent_btn">
      <li><a href="/" class="btn_tel"><img src="images/icon_tel.gif" alt=""><span>拨打电话</span></a></li>
      <li><a href="/" class="btn_chat"><img src="images/icon_chat.gif" alt=""><span>快速留言</span></a></li>
    </ul>
  </div>
</body>

CSS 样式设计

接下来,通过 CSS 对弹窗及其内部元素进行样式美化与定位,确保其显示效果符合预期。


*{
  margin: 0;
  padding: 0;
  list-style: none;
  outline: none;
  box-sizing: border-box;
  text-decoration: none;
}
a { -webkit-touch-callout: none; text-decoration: none }
:focus { outline: 0 }
body{
  font-family: Helvetica, STHeiTi, "Microsoft YaHei", sans-serif;
  color: #595757;
  background-color: #fff;
  outline: 0;
  overflow-x: hidden;
  -webkit-tap-highlight-color:rgba(0,0,0,0);
}
img{
  border: none;
}
.whiteColor{
  color: #fff;
  text-align: center;
}
.flex_parent{
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
}
.flex_child{
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
}
/*middle_box*/
body{
  position: relative;
  background-color: #272822;
}
#middleBox{
  width: 260px;
  height: 248px;
  margin: 0 auto;
  background-image: url(../images/irfa_dog.jpg);
  background-repeat: no-repeat;
  background-size: 100% 100%;
  border-radius: 10px;
  /*水平垂直居中*/
  position: fixed;
  left: 50%;
  top: 50%;
  margin-top: -124px;
  -webkit-transform: translateX(-50%);
  -moz-transform: translateX(-50%);
  -o-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
  transform: translateX(-50%);
  z-index: 100;
}
.close_btn{
  display: block;
  overflow: hidden;
  position: absolute;
  top: -10px;
  right: -10px;
}
.will_close{
  width:32px;
}
#middleBox a{
  overflow: hidden;
}
#middleBox a img,#middleBox a span,#middleBox ul li{
  float: left;
}
#middleBox a span{
  font-size: 16px;
  color: #fff;
}
#middleBox ul{
  overflow: hidden;
}
#middleBox ul li{
  width: 130px;
}
#middleBox ul li a{
  line-height: 50px;
  display: block;
  padding-left: 5px;
}
#middleBox ul li a img{
  width:30px;
  margin-right: 2px;
  margin-top: 8px;
  margin-left: 5px;
}
.btn_tel{
  background-color: #F92665;
  border-bottom-left-radius: 10px;
}
.btn_chat{
  background-color: #1EA362;
  border-bottom-right-radius: 10px;
}
.parent_btn{
  position: absolute;
  left: 0;
  bottom: 0;
}

JavaScript 交互逻辑

最后,使用 JavaScript 控制弹窗的显示与隐藏逻辑,实现点击关闭后自动重现的功能。


/**
 * Created by Administrator on 2016/7/19.
 */
var adv={
  div:null,
  timer:null,
  btn:null,
  init:function(){
    this.btn=document.getElementById("closeBtn");
    this.div=document.getElementById("middleBox");
    this.btn.onclick=this.displayNone;
  },
  displayBlock:function(){
    adv.div.style.display="block";
  },
  displayNone:function(){
    adv.div.style.display="none";
    timer=setTimeout(function(){
      adv.displayBlock();
    },3000);
  }
};
window.onload=function(){
  adv.init();
};

总结

以上即为实现该效果的完整代码与解析,希望对你的学习有所帮助,也欢迎继续支持本站内容。

作者最新文章