基于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判断单选框或复选框是否选中方法集锦
Apr 04 Javascript
javascript动态加载二
Aug 22 Javascript
关于textarea提交的内容无法换行的解决办法
Apr 09 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
JS重载实现方法分析
Dec 16 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
Jun 14 jQuery
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
js form表单input框限制20个字符,10个汉字代码实例
Apr 12 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
Sep 25 Javascript
区分vue-router的hash和history模式
Oct 03 Javascript
JavaScript中关于预编译、作用域链和闭包的理解
Mar 31 Javascript
javascript代码简写的几种常用方式汇总
Aug 23 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
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
跟老齐学Python之做一个小游戏
2014/09/28 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
html5启动原生APP总结
2020/07/03 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
优秀员工评语
2014/02/10 职场文书
聚美优品励志广告词
2014/03/14 职场文书
电子专业求职信
2014/06/19 职场文书
语文教研活动总结
2014/07/02 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
2016关于军训的心得体会
2016/01/11 职场文书