基于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类中定义原型方法的两种实现的区别
Mar 08 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
Jan 31 Javascript
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
js控制页面控件隐藏显示的两种方法介绍
Oct 09 Javascript
浅谈jQuery为哪般去掉了浏览器检测
Aug 29 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
自动适应iframe右边的高度
Dec 22 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
Jan 10 Javascript
详解angularjs获取元素以及angular.element()用法
Jul 25 Javascript
实例详解vue中的$root和$parent
Apr 29 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 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学习 计数器实例代码
2008/06/15 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
python 正则表达式 概述及常用字符
2009/05/04 Python
python生成随机验证码(中文验证码)示例
2014/04/03 Python
python实现定制交互式命令行的方法
2014/07/03 Python
python基础教程之面向对象的一些概念
2014/08/29 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python将图片转换为字符画的方法
2020/06/16 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
UNIX文件系统分类
2014/11/11 面试题
校园安全教育广播稿
2014/02/17 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
幼儿园六一亲子活动方案
2014/08/26 职场文书
暑期工社会实践报告
2015/07/13 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
2016年12月份红领巾广播稿
2015/12/21 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
python可视化之颜色映射详解
2021/09/15 Python