基于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 相关文章推荐
php对mongodb的扩展(小试牛刀)
Nov 11 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
Feb 26 Javascript
JavaScript中toString()方法的使用详解
Jun 05 Javascript
jQuery.prop() 使用详解
Jul 19 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
深入理解jQuery()方法的构建原理
Dec 05 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
JS数组实现分类统计实例代码
Sep 30 Javascript
vue语法自动转typescript(解放双手)
Sep 18 Javascript
基于javascript实现碰撞检测
Mar 12 Javascript
在Vue 中实现循环渲染多个相同echarts图表
Jul 20 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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
php 变量定义方法
2009/06/14 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
python如何获取服务器硬件信息
2017/05/11 Python
python 中split 和 strip的实例详解
2017/07/12 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
《海底世界》教学反思
2014/04/16 职场文书
2014年班主任工作总结
2014/11/08 职场文书
作弊检讨书范文
2015/05/06 职场文书
教导处教学工作总结
2015/08/12 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书