JS实现图片点击后出现模态框效果


Posted in Javascript onMay 03, 2017

很多时候我们在浏览图片时,会发现点击图片后,会弹出一个被点击图片的放大图片浮在页面上,占满整个窗口。这就是图片模态框效果。

这个效果可以使用某些js库实现,如bpopupJs。但是在这里我们使用纯js实现,能够更好理解效果原理和实现方法。

一.实现思路

我们点击小图片之后,图片模态框出现,同时图片模态框上有一个关闭按钮和图片的标题。

因此,我们的实现思路就是:

图片模态框有大图片,关闭按钮,图片标题三部分。

将图片模态框隐藏,在点击小图片之后,模态框出现。

点击关闭按钮后,模态框隐藏。

二.HTML代码

首先,我们的原始页面上有一个图片如下:

JS实现图片点击后出现模态框效果

HTML代码如下:

<h2>图片点击弹出模态框效果</h2>
<p>图片模态框很不错,是个值得学习的效果</p>
<img src="star.jpeg" id="real" alt="model test picture">

模态框的HTML代码如下:

<div class="motai" id="mo">
 <span class="close" id="close">×</span>
 <img class="motaiimg" id="moimg">
 <div id="caption"></div>
</div>

三.css代码

我们需要通过css设置模态框中各元素的表现效果同时将其隐藏起来,具体有如下几步:

1.模态框

#mo{
  display: none;/*隐藏模态框*/
  width: 100%;
  height: 100%;
  position: fixed;/*定位方式为固定定位*/
  overflow: auto;/*不滚动*/
  background-color: rgba(0,0,0,0.7);
  top: 0px;
  left: 0px;
  z-index: 1;/*置于页面图层之上*/
 }

 2.关闭按钮

.close{
  font-size: 40px;
  font-weight: bold;
  position: absolute;
  top: 20px;
  right: 14%;
  color:#f1f1f1;
 }
 .close:hover,
 .close:focus{
  color:#bbb;
  cursor:pointer;
 }

3.模态框中图片

#moimg{
  display: block;/*图片表现为块*/
  margin:25px auto;/*图片居中对齐*/
  width: 60%;
  max-width: 750px;/*自适应布局*/
 }

4.图片标题

#caption{
  text-align: center;/*文本居中*/
  margin: 15px auto;
  width: 60%;
  max-height: 750px;
  font-size: 20px;
  color:#ccc;
 }

以上就是基本的模态框各元素的css代码,如果想实现点击后扩大的动画效果,可以增加以下代码:

#moimg,#caption{
  -webkit-animation: first 1s;
  -o-animation: first 1s;
  animation: first 1s;
 }
 @keyframes first{
  from{transform: scale(0.1);}
  to{transform: scale(1);}
 }

通过以上步骤,我们已经制作好了模态框页面。在使用js来完成交互效果就可以了。

四.js代码

js代码主要是图片和关闭按钮的点击交互,需要注意的是js代码须位于模态框HTML代码之后,js具体代码如下,:

var motai=document.getElementById('mo')
 var moimg=document.getElementById("moimg")
 var realimg=document.getElementById("real")
 var caption=document.getElementById("caption")
 realimg.onclick=function(){
  motai.style.display="block"
  moimg.src=this.src
  caption.innerHTML=this.alt
 }
 var span=document.getElementById("close");
 span.onclick=function(){
  motai.style.display="none";
 }

通过以上步骤,图片的模态框效果就实现了,

JS实现图片点击后出现模态框效果

最后总的代码如下:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>close</title>
 <style>
 #real{
  /*点击弹出模态框的图片*/
  margin: 30px;
  width: 250px;
  border-radius:6px;
 }
 #real:hover{
  opacity: 0.6;
 }
 #mo{
  display: none;/*隐藏*/
  width: 100%;
  height: 100%;
  position: fixed;
  overflow: auto;
  background-color: rgba(0,0,0,0.7);
  top: 0px;
  left: 0px;
  z-index: 1;
 }
 #moimg{
  display: block;
  margin:25px auto;
  width: 60%;
  max-width: 750px;
 }
 #caption{
  text-align: center;
  margin: 15px auto;
  width: 60%;
  max-height: 750px;
  font-size: 20px;
  color:#ccc;
 }
 #moimg,#caption{
  -webkit-animation: first 1s;
  -o-animation: first 1s;
  animation: first 1s;
 }
 @keyframes first{
  from{transform: scale(0.1);}
  to{transform: scale(1);}
 }
 .close{
  font-size: 40px;
  font-weight: bold;
  position: absolute;
  top: 20px;
  right: 14%;
  color:#f1f1f1;
 }
 .close:hover,
 .close:focus{
  color:#bbb;
  cursor:pointer;
 }
 @media only screen and(max-width:750px ) {
  #moimg{
   width: 100%;
  }
 }
 </style>
</head>
<body>
<h2>图片点击弹出模态框效果</h2>
<p>图片模态框很不错,是个值得学习的效果</p>
<img src="star.jpeg" id="real" alt="model test picture">
<!--图片模态框 -->
<div class="motai" id="mo">
 <span class="close" id="close">×</span>
 <img class="motaiimg" id="moimg">
 <div id="caption"></div>
</div>
<script>
 var motai=document.getElementById('mo')
 var moimg=document.getElementById("moimg")
 var realimg=document.getElementById("real")
 var caption=document.getElementById("caption")
 realimg.onclick=function(){
  motai.style.display="block"
  moimg.src=this.src
  caption.innerHTML=this.alt
 }
 var span=document.getElementById("close");
 span.onclick=function(){
  motai.style.display="none";
 }
</script>
</body>
</html>

以上所述是小编给大家介绍的JS实现图片点击后出现模态框效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript setTimeout()传递函数参数(包括传递对象参数)
Apr 07 Javascript
JS数学函数Exp使用说明
Aug 09 Javascript
实测jquery data()如何存值
Aug 18 Javascript
jsPDF导出pdf示例
May 02 Javascript
jQuery修改CSS伪元素属性的方法
Jul 30 Javascript
Javascript typeof与instanceof的区别
Oct 18 Javascript
原生js实现焦点轮播图效果
Jan 12 Javascript
基于js中的原型(全面讲解)
Sep 19 Javascript
JS实现去除数组中重复json的方法示例
Dec 21 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
JS快速实现简单计算器
Apr 08 Javascript
抖音短视频(douyin)去水印工具的实现代码
Mar 30 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 #Javascript
javascript 判断一个对象为数组的方法
May 03 #Javascript
深入理解node.js之path模块
May 03 #Javascript
判断颜色是否合法的正则表达式(详解)
May 03 #Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 #Javascript
ES6中参数的默认值语法介绍
May 03 #Javascript
Express之get,pos请求参数的获取
May 02 #Javascript
You might like
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
vue debug 二种方法
2018/09/16 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
js实现经典贪吃蛇小游戏
2020/03/19 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python实现按行分割文件
2019/07/22 Python
python ftplib模块使用代码实例
2019/12/31 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
机关门卫岗位职责
2013/12/30 职场文书
触电现场处置方案
2014/05/14 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
大学生毕业个人总结
2015/02/15 职场文书
毕业生政审意见范文
2015/06/04 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python