zShowBox 图片放大展示jquery版 兼容性


Posted in Javascript onSeptember 24, 2011

zShowBox 图片放大展示jquery版 兼容性
zShowBox.js

/* 
* zShowBox (图片放大展示) 
*/ 
function zShowBox(domChunk) { 
//为每张图片链接加上 class="zshowbox" 
var zcounter = 0; 
$(domChunk + ' a').each(function () { 
var a_href = $(this)[0].href.toLowerCase(); 
var file_type = a_href.substring(a_href.lastIndexOf('.')); 
if (file_type == '.jpeg' || file_type == '.jpg' || file_type == '.png' || file_type == '.gif' || file_type == '.bmp') { $(this).addClass('zshowbox').attr('id', 'zsb-' + zcounter); zcounter++; }; 
}); 
$(domChunk + ' a.zshowbox').click(function () { 
var current = $(this).attr('id').split('zsb-')[1], 
pagesize = zsb_getPageSize(), 
zsb_img_url = $(this).attr('href'), 
css_zsb_bg = 'z-index:9999;overflow:hidden;position:fixed;left:0;top:0;width:100%;height:100%;background:#000 url(' + loadingimg + ') no-repeat center center;', 
css_zsb = 'z-index:99999;position:fixed;left:50%;top:50%;', 
css_zsb_img = 'display:none;border:5px solid #777;border-radius:6px;-moz-border-radius:6px;-webkit-border-radius:6px;box-shadow:1px 1px 5px #333,-1px -1px 5px #333;-moz-box-shadow:1px 1px 5px #333,-1px -1px 5px #333;-webkit-box-shadow:1px 1px 5px #333,-1px -1px 5px #333;', 
css_zsb_p_n = 'display:none;cursor:pointer;position:absolute;top:50%;line-height:80px;margin:-40px 0 0 0;color:#eee;text-shadow:1px 3px 5px #000;font-size:40px;font-family:Arial,Tahoma;'; 
if (typeof document.body.style.maxHeight === "undefined") { //if IE 6 
alert(IE6!太落后了……'); 
return false; 
} else { 
$('body').append('<div id="zsb_bg" style="' + css_zsb_bg + '"></div><div id="zsb" style="' + css_zsb + '"><img id="zsb_img" style="' + css_zsb_img + '" /><p id="zsb_prev" style="left:-30px;' + css_zsb_p_n + '">«</p><p id="zsb_next" style="right:-30px;' + css_zsb_p_n + '">»</p></div>'); 
$('#zsb_bg').fadeTo(600, 0.7); 
zsh_img('#zsb_img', zsb_img_url, pagesize, current, zcounter); 
$('#zsb_prev,#zsb_next').click(function () { 
if ($(this).attr('id') == 'zsb_prev') current--; else current++; 
$(this).parent().prev().css("background-image", 'url(' + loadingimg + ')'); 
$('#zsb').find('img').remove().end().append('<img id="zsb_img" style="' + css_zsb_img + '" />'); 
zsb_img_url = $('#zsb-' + current).attr('href'); 
zsh_img('#zsb_img', zsb_img_url, pagesize, current, zcounter); 
return false; 
}); 
$('#zsb_bg,#zsb_img').click(function () { 
$('#zsb_bg,#zsb_img').unbind('click'); 
$('#zsb_bg,#zsb').fadeOut(400, function () { $(this).remove(); }); 
return false; 
}); 
} 
return false; 
}); 
} 
function zsh_img(img_id, zsb_img_url, pagesize, current, zcounter) { 
$('#zsb_prev,#zsb_next').hide(); 
//动态获取图片的宽度和高度的像素值 
// //IE下,ajax会缓存,导致onreadystatechange函数没有被触发,所以需要加一个随机数 
$(img_id).attr('src', zsb_img_url+ '?t=' + Math.random()).load(function () { 
var img_w,img_h; 
var x = pagesize[0] - 100, y = pagesize[1] - 100; 
//imgReady 图片头数据加载就绪事件 - 更快获取图片尺寸 
imgReady(zsb_img_url, function (){ 
img_w=this.width; img_h=this.height; 
}); 
// img_w = $(this).width(), img_h = $(this).height(); 
if (img_w > x) { 
img_h = img_h * (x / img_w); 
img_w = x; 
if (img_h > y) { 
img_w = img_w * (y / img_h); 
img_h = y; 
} 
} else if (img_h > y) { 
img_w = img_w * (y / img_h); 
img_h = y; 
if (img_w > x) { 
img_h = img_h * (x / img_w); 
img_w = x; 
} 
} 
var marginleft = -(img_w / 2 + 5) + 'px', 
margintop = -(img_h / 2 + 5) + 'px'; 
img_w = img_w + 'px', img_h = img_h + 'px'; 
$(this).css({ "width": img_w, "height": img_h }).fadeIn(600).parent().css({ "margin-left": marginleft, "margin-top": margintop }).prev().css("background-image", "none"); 
if (current > 0){ $('#zsb_prev').show();} 
if (current < zcounter - 1){ $('#zsb_next').show();} 
}); 
} 
function zsb_getPageSize() { 
var de = document.documentElement; 
var w = window.innerWidth || self.innerWidth || (de && de.clientWidth) || document.body.clientWidth; 
var h = window.innerHeight || self.innerHeight || (de && de.clientHeight) || document.body.clientHeight; 
arrayPageSize = [w, h]; 
return arrayPageSize; 
} 
var loadingimg = (function loadingimg() { //获取loading图片url 
var i = 0, got = -1, url, len = document.getElementsByTagName('script').length; 
while (i <= len && got == -1) { 
url = document.getElementsByTagName('script')[i].src; 
got = url.indexOf('/zshowbox.js'); 
i++; 
} 
return url.replace('/zshowbox.js', '/zshowbox-loading.gif'); 
})();

图片头数据加载就绪事件 - 更快获取图片尺寸
/** 
* 图片头数据加载就绪事件 - 更快获取图片尺寸 
* @version 2011.05.27 
* @author TangBin 
* @see http://www.planeart.cn/?p=1121 
* @param {String} 图片路径 
* @param {Function} 尺寸就绪 
* @param {Function} 加载完毕 (可选) 
* @param {Function} 加载错误 (可选) 
* @example imgReady('/upload/201109/20110924011408313.png', function () { 
alert('size ready: width=' + this.width + '; height=' + this.height); 
}); 
*/ 
var imgReady = (function () { 
var list = [], intervalId = null, 
// 用来执行队列 
tick = function () { 
var i = 0; 
for (; i < list.length; i++) { 
list[i].end ? list.splice(i--, 1) : list[i](); 
}; 
!list.length && stop(); 
}, 
// 停止所有定时器队列 
stop = function () { 
clearInterval(intervalId); 
intervalId = null; 
}; 
return function (url, ready, load, error) { 
var onready, width, height, newWidth, newHeight, 
img = new Image(); 
img.src = url; 
// 如果图片被缓存,则直接返回缓存数据 
if (img.complete) { 
ready.call(img); 
load && load.call(img); 
return; 
}; 
width = img.width; 
height = img.height; 
// 加载错误后的事件 
img.onerror = function () { 
error && error.call(img); 
onready.end = true; 
img = img.onload = img.onerror = null; 
}; 
// 图片尺寸就绪 
onready = function () { 
newWidth = img.width; 
newHeight = img.height; 
if (newWidth !== width || newHeight !== height || 
// 如果图片已经在其他地方加载可使用面积检测 
newWidth * newHeight > 1024 
) { 
ready.call(img); 
onready.end = true; 
}; 
}; 
onready(); 
// 完全加载完毕的事件 
img.onload = function () { 
// onload在定时器时间差范围内可能比onready快 
// 这里进行检查并保证onready优先执行 
!onready.end && onready(); 
load && load.call(img); 
// IE gif动画会循环执行onload,置空onload即可 
img = img.onload = img.onerror = null; 
}; 
// 加入队列中定期执行 
if (!onready.end) { 
list.push(onready); 
// 无论何时只允许出现一个定时器,减少浏览器性能损耗 
if (intervalId === null) intervalId = setInterval(tick, 40); 
}; 
}; 
})();

调用:
zShowBox('.gridlist');

附加 loging

zShowBox 图片放大展示jquery版 兼容性
打包下载地址

Javascript 相关文章推荐
javascript 获取表单file全路径
Dec 31 Javascript
使图片旋转的3种解决方案
Nov 21 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
javascript弹出带文字信息的提示框效果
Jul 19 Javascript
浅谈js的异步执行
Oct 18 Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 Javascript
Node.js console控制台简单用法分析
Jan 04 Javascript
使用webpack搭建vue项目及注意事项
Jun 10 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 Javascript
解决Vue大括号字符换行踩的坑
Nov 09 Javascript
也说JavaScript中String类的replace函数
Sep 22 #Javascript
javascript笔记 String类replace函数的一些事
Sep 22 #Javascript
Prototype的Class.create函数解析
Sep 22 #Javascript
Javascript中的this绑定介绍
Sep 22 #Javascript
StringTemplate遇见jQuery冲突的解决方法
Sep 22 #Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
Sep 22 #Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 #Javascript
You might like
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现模拟时钟代码推荐
2015/11/08 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python使用functools实现注解同步方法
2018/02/06 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python日期相关操作实例小结
2019/06/24 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
2014新生大学四年计划书
2014/09/21 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
好媳妇事迹材料
2014/12/24 职场文书
英雄儿女观后感
2015/06/09 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书