基于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类定义例子
Sep 12 Javascript
javascript笔记 String类replace函数的一些事
Sep 22 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
Mar 14 Javascript
Easyui 之 Treegrid 笔记
Apr 29 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
Dec 08 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
Feb 14 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
微信小程序仿美团城市选择
Jun 06 Javascript
create-react-app安装出错问题解决方法
Sep 04 Javascript
vue src动态加载请求获取图片的方法
Oct 17 Javascript
vue解决跨域问题(推荐)
Nov 10 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 处理图片的类实现代码
2009/10/23 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
详解Vue自定义过滤器的实现
2017/01/10 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[52:39]完美世界DOTA2联赛PWL S3 CPG vs Forest 第一场 12.16
2020/12/17 DOTA
django1.11.1 models 数据库同步方法
2018/05/30 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
简单的命令查看安装的python版本号
2020/08/28 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
Linux的文件类型
2012/03/07 面试题
《英英学古诗》教学反思
2014/04/11 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
高一军训决心书
2015/02/05 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
vscode内网访问服务器的方法
2022/06/28 Servers