基于JavaScript实现图片点击弹出窗口而不是保存


Posted in Javascript onFebruary 06, 2016

一直想给安装一个缩略图点击弹出的插件,但是找了找几乎都是用的php来做的,插件的使用和安装极其繁琐,于是上网查了些demo,自己实现了一个纯js的图片弹出插件。

实现的思路是通过编写hook图片的onclick事件的函数,在函数中对body追加div元素,再将传入的图片对象放入元素中,同时再监听div的onclilck事件,当捕捉到点击,再关闭(其实是隐藏)弹出的div。

通过在函数初始化的时候收集页面所有的img元素,再为每个img元素增加onclick="picHook(this)"这条属性,这样当图片在被点击时,这个函数就能自动创建div蒙板背景,并获取被点击图片的宽度和高度,同时生成一个新的和图片一样大小的div来显示图片。当蒙板再次被点击时,hook事件再次响应,并将蒙板和图片div的style置为none,弹出的图片就被关闭了。

说起来很简单,做起来就更简单了,简单到只需要一个函数即可实现。

talking is cheap,show you my code:

<script>
function picHook(pic){
/*图片对象*/
var imgs = document.getElementsByTagName("img");
/*前景div*/
var light = document.getElementById('light') || document.createElement("div");
/*背景div*/
var bg = document.getElementById('bg') || document.createElement("div");
/*图片放大*/
var s_pic = document.getElementById('s_pic') || document.createElement("img");
/*css对象*/
var css = document.createElement("style");
/*css样式*/
var csstext = '\
.pic_bg{\
position: absolute;\
margin:0 auto; \
top: 0%;\
left: 0%;\
width: 100%;\
padding-bottom: 1000%;\
background-color: black;\
z-index:1001;\
opacity:.80;\
filter: alpha(opacity=80);\
overflow:scroll;\
}\
.pic_div {\
margin-bottom: auto;\
position: fixed;\
left:50%;\
top:50%;\
margin-left:-250px;\
margin-top:-100px;\
z-index:1002;\
}';
/*收集页面所有图片对象*/
for(i=0; i<imgs.length;i++){
imgs[i].setAttribute("onclick", "picHook(this)" );
}
css.type = "text/css";

/*关闭图像*/
if( !pic ){
bg.style.display = light.style.display = "none";
}
/*ie兼容*/
if(css.styleSheet){
css.styleSheet.cssText = csstext;
}else{
css.appendChild(document.createTextNode(csstext));
}
s_pic.setAttribute("id", "s_pic");
s_pic.setAttribute("src", pic.src);
light.setAttribute("id", "light");
light.setAttribute("class", "pic_div");
light.style.display = 'block';
light.appendChild(s_pic);
bg.setAttribute("id", "bg");
bg.setAttribute("class", "pic_bg");
bg.setAttribute("onclick", "picHook()");
bg.style.display = light.style.display;
document.getElementsByTagName("head")[0].appendChild(css); 
document.body.appendChild(bg);
document.body.appendChild(light);
}
</script>

将这段代码保存在页面的head中,再将body的onload事件绑定到picHook()函数,你的页面中就也可以实现图片点击弹出大图啦。

还存在一点小bug,主要是因为我不太熟悉css,导致div的样式做的有点难看。

css的样式我是直接声明在js里的,这样就不用再另外创建css文件了。

等过了这个节再琢磨琢磨css,优化下样式。希望本文给大家分享的JavaScript实现图片点击弹出窗口而不是保存的相关知识能够帮助到大家。

Javascript 相关文章推荐
jquery插件qrcode在线生成二维码
Apr 26 Javascript
Javascript实现获取及设置光标位置的方法
Jul 21 Javascript
javascript判断复选框是否选中的方法
Oct 16 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
Nov 04 Javascript
详谈JS中实现种子随机数及作用
Jul 19 Javascript
Javascript 引擎工作机制详解
Nov 30 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
Dec 14 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
Feb 21 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
node文件上传功能简易实现代码
Jun 16 Javascript
使用typescript开发angular模块并发布npm包
Apr 19 Javascript
VSCode launch.json配置详细教程
Jun 18 Javascript
javascript+css3 实现动态按钮菜单特效
Feb 06 #Javascript
Angularjs全局变量被作用域监听的正确姿势
Feb 06 #Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 #Javascript
简介AngularJS中$http服务的用法
Feb 06 #Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
Feb 06 #Javascript
JavaScript中数组添加值和访问值常见问题
Feb 06 #Javascript
详解Angularjs filter过滤器
Feb 06 #Javascript
You might like
一篇入门的php Class 文章
2007/04/04 PHP
php 文件上传实例代码
2012/04/19 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
js计算页面刷新的次数
2009/07/20 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
详解Python的collections模块中的deque双端队列结构
2016/07/07 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
模范教师事迹材料
2014/02/10 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
档案管理员岗位职责
2015/02/12 职场文书
初中毕业生感言
2015/07/31 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
python_tkinter事件类型详情
2022/03/20 Python