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 学习之旅 (1)
Feb 05 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
Feb 24 Javascript
jquery与js函数冲突的两种解决方法
Sep 09 Javascript
js实现仿QQ秀换装效果的方法
Mar 04 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
Apr 06 Javascript
jQuery实现图片局部放大镜效果
Mar 17 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
May 18 Javascript
js获取Html元素的实际宽度高度的方法
May 19 Javascript
基于JavaScript实现随机颜色输入框
Dec 10 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
vue 引入公共css文件的简单方法(推荐)
Jan 20 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
Aug 22 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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
python 判断自定义对象类型
2009/03/21 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
python中列表的含义及用法
2020/05/26 Python
Python计算信息熵实例
2020/06/18 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
乡镇干部先进事迹材料
2014/02/03 职场文书
五型班组建设方案
2014/02/10 职场文书
搞笑爱情保证书
2014/04/29 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
2015年科协工作总结
2015/05/19 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers