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 相关文章推荐
Prototype ObjectRange对象学习
Jul 19 Javascript
JavaScript 面向对象之命名空间
May 04 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
Mar 06 Javascript
Js日期选择器并自动加入到输入框中示例代码
Aug 02 Javascript
深入理解Javascript中this的作用域
Aug 12 Javascript
让人蛋疼的JavaScript语法特性
Sep 30 Javascript
JS判断字符串字节数并截取长度的方法
Mar 05 Javascript
JS结合bootstrap实现基本的增删改查功能
Jul 22 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
js实现二级联动简单实例
Jan 11 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 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
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
Python随机读取文件实现实例
2017/05/25 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
python对日志进行处理的实例代码
2018/10/06 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
django中间键重定向实例方法
2019/11/10 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
英国现代市场:ARKET
2019/04/10 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
出生公证书样本
2014/04/04 职场文书
疾病捐款倡议书
2014/05/13 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
JavaScript控制台的更多功能
2021/04/28 Javascript
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle