基于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 相关文章推荐
js post方式传递提交的实现代码
May 31 Javascript
关于全局变量和局部变量的那些事
Jan 11 Javascript
node.js下when.js 的异步编程实践
Dec 03 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
JQuery判断checkbox是否选中及其它复选框操作方法合集
Jun 01 Javascript
微信小程序入门教程
Nov 18 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
详解webpack import()动态加载模块踩坑
Jul 17 Javascript
微信小程序如何实现点击图片放大功能
Jan 21 Javascript
JavaScript函数重载操作实例浅析
May 02 Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 Javascript
JavaScript this关键字的深入详解
Jan 14 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
使用php4加速网络传输
2006/10/09 PHP
isset和empty的区别
2007/01/15 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP生成压缩文件实例
2015/02/07 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
python实现简易通讯录修改版
2018/03/13 Python
python绘制圆柱体的方法
2018/07/02 Python
python 批量修改/替换数据的实例
2018/07/25 Python
python三大神器之fabric使用教程
2019/06/10 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
新年主持词
2014/03/27 职场文书
无传销社区工作方案
2014/05/13 职场文书
高一军训决心书
2015/02/05 职场文书
冰峪沟导游词
2015/02/09 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书