基于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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 11 Javascript
Js与下拉列表处理问题解决
Feb 13 Javascript
jQuery学习笔记之总体架构
Jun 03 Javascript
JQuery查找DOM节点的方法
Jun 11 Javascript
JS控制表单提交的方法
Jul 09 Javascript
jQuery新窗口打开外链接
Jul 21 Javascript
javascript 动态样式添加的简单实现
Oct 11 Javascript
正则验证小数点后面只能有两位数的方法
Feb 28 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 Javascript
vue.config.js中配置Vue的路径别名的方法
Feb 11 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
基于文本的访客签到簿
2006/10/09 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
javascript 获取图片颜色
2009/04/05 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
python3实现基于用户的协同过滤
2018/05/31 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
django orm模块中的 is_delete用法
2020/05/20 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
产品质量承诺范本
2014/03/31 职场文书
邀请函的格式
2015/01/30 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏