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 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
Mar 25 Javascript
Javascript 颜色渐变效果的实现代码
Oct 01 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
Sep 05 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
Sep 13 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
js鼠标跟随运动效果
Mar 11 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
使用store来优化React组件的方法
Oct 23 Javascript
js前端导出Excel的方法
Nov 01 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 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
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Django异步任务线程池实现原理
2019/12/17 Python
python time()的实例用法
2020/11/03 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
幼儿园小班植树节活动方案
2014/03/04 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
安全协议书
2014/04/23 职场文书
技校毕业生自荐信
2014/06/03 职场文书
经营理念标语
2014/06/21 职场文书
九寨沟导游词
2015/02/02 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL
5个实用的JavaScript新特性
2022/06/16 Javascript