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注入技巧
Jun 22 Javascript
JS Replace 全部替换字符的用法小结
Dec 24 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
JS中setTimeout的巧妙用法前端函数节流
Mar 24 Javascript
javascript中递归的两种写法
Jan 17 Javascript
基于Vue实例对象的数据选项
Aug 09 Javascript
Vue精简版风格指南(推荐)
Jan 30 Javascript
js中如何完美的解析数据
Mar 18 Javascript
js实现的格式化数字和金额功能简单示例
Jul 30 Javascript
Vue filter 过滤当前时间 实现实时更新效果
Dec 20 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 Javascript
vue实现员工信息录入功能
Jun 11 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
星际争霸秘籍
2020/03/04 星际争霸
php eval函数用法总结
2012/10/31 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
jquery 实现两Select 标签项互调示例代码
2014/09/25 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
python实现在windows下操作word的方法
2015/04/28 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
python2和python3哪个使用率高
2020/06/23 Python
virtualenv介绍及简明教程
2020/06/23 Python
详解Django中异步任务之django-celery
2020/11/05 Python
html5实现输入框fixed定位在屏幕最底部兼容性
2020/07/03 HTML / CSS
信用社实习人员自我鉴定
2013/09/20 职场文书
高中运动会广播稿
2014/01/21 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
大课间活动实施方案
2014/03/06 职场文书
企业金融服务方案
2014/06/03 职场文书
师德模范事迹材料
2014/06/03 职场文书
学生会干部任命书
2015/09/21 职场文书
施工安全责任协议书
2016/03/23 职场文书
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers