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 相关文章推荐
疯掉了,尽然有js写的操作系统
Apr 23 Javascript
jQuery数组处理方法汇总
Jun 20 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 Javascript
微信小程序图片横向左右滑动案例
May 19 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
jquery与js实现全选功能的区别
Jun 11 jQuery
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
Vue 中批量下载文件并打包的示例代码
Nov 20 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
Element-UI 使用el-row 分栏布局的教程
Oct 26 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
长波知识介绍
2021/03/01 无线电
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
js中new一个对象的过程
2017/02/20 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
python查看zip包中文件及大小的方法
2015/07/09 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
详解Python3注释知识点
2019/02/19 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
python实现在一个画布上画多个子图
2020/01/19 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
医院护理人员的自我评价分享
2013/10/04 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
求职自我评价怎么写
2015/03/09 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Java实现房屋出租系统详解
2021/10/05 Java/Android
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers