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 相关文章推荐
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
Jul 26 Javascript
js自定义事件及事件交互原理概述(一)
Feb 01 Javascript
Jquery 表单验证类介绍与实例
Jun 09 Javascript
JS截取与分割字符串常用技巧总结
Nov 10 Javascript
jQuery 常用代码集锦(必看篇)
May 16 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
Apr 14 Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 Javascript
移动端手指放大缩小插件与js源码
May 22 Javascript
JS实现的文字间歇循环滚动效果完整示例
Feb 13 Javascript
微信小程序实现文字无限轮播效果
Dec 28 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
Sep 24 Javascript
全网小程序接口请求封装实例代码
Nov 06 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 chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php header函数的常用http头设置
2015/06/25 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
PHP7 其他修改
2021/03/09 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
python解析文件示例
2014/01/23 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
工厂总经理岗位职责
2014/02/07 职场文书
法人授权委托书格式
2014/04/08 职场文书
新教师岗前培训方案
2014/06/05 职场文书
幼师求职自荐信
2015/03/26 职场文书
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python