基于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 相关文章推荐
htm调用JS代码
Mar 15 Javascript
jquery判断单选按钮radio是否选中的方法
May 05 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
Feb 29 Javascript
js时间戳格式化成日期格式的多种方法介绍
Feb 16 Javascript
vue.js开发环境安装教程
Mar 17 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
React router动态加载组件之适配器模式的应用详解
Sep 12 Javascript
Bootstrap4 gulp 配置详解
Jan 06 Javascript
js利用拖放实现添加删除
Aug 27 Javascript
微信小程序实现点击导航条切换页面
Nov 19 Javascript
Vue实现简单购物车功能
Dec 13 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
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 字符串函数收集
2010/03/29 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
php生成HTML文件的类方法
2019/10/11 PHP
PHP用swoole+websocket和redis实现web一对一聊天
2019/11/05 PHP
JS自动缩小超出大小的图片
2012/10/12 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
MADE法国:提供原创设计师家具
2018/09/18 全球购物
GWT都有什么特性
2016/12/02 面试题
办理信用卡工作证明
2014/01/11 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
医院病假条范文
2015/08/17 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python