基于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 相关文章推荐
javascript Discuz代码中的msn聊天小功能
May 25 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
手机平板等移动端适配跳转URL的js代码
Jan 25 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
Feb 20 Javascript
每天一篇javascript学习小结(RegExp对象)
Nov 17 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 Javascript
使用JavaScript保存文本文件到本地的两种方法
Jan 22 Javascript
JS为什么说async/await是generator的语法糖详解
Jul 11 Javascript
vue - vue.config.js中devServer配置方式
Oct 30 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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 curl模拟浏览器抓取网站信息
2013/10/28 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python中对列表排序实例
2015/01/04 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
python os模块在系统管理中的应用
2020/06/22 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
大一学生的职业生涯规划书范文
2014/01/19 职场文书
领导干部培训感言
2014/01/23 职场文书
公司管理建议书范文
2014/03/12 职场文书
车辆转让协议书
2014/09/24 职场文书
2014年残联工作总结
2014/11/21 职场文书
2014年财政工作总结
2014/12/10 职场文书
个园导游词
2015/02/04 职场文书
任命书格式范文
2015/09/22 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
MySQL之select、distinct、limit的使用
2021/11/11 MySQL