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 相关文章推荐
jQuery 实现评论等级好评差评特效
May 06 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
javascript事件的绑定基础实例讲解(34)
Feb 14 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
May 30 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
Dec 05 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
jQuery分组选择器简单用法示例
Apr 04 jQuery
Vuex的各个模块封装的实现
Jun 05 Javascript
javascript解析json格式的数据方法详解
Aug 07 Javascript
Vue中computed和watch有哪些区别
Dec 19 Vue.js
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
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
numpy自动生成数组详解
2017/12/15 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
介绍一下gcc特性
2012/01/20 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
年度考核自我鉴定
2014/03/19 职场文书
民政局个人整改措施
2014/09/24 职场文书
万里长城导游词
2015/01/30 职场文书
校车安全管理责任书
2015/05/11 职场文书
山楂树之恋观后感
2015/06/11 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python