zoomla
Version:
16年专业研发|中文alexa排名第一的CMS品牌-基于dotNET core、功能强大,集成站群、微信开发、小程序与ERP及OA办公系统,支持国际语言和多民族语言,世界五百强与大型门户专用高端网站内核CMS系统
171 lines (154 loc) • 5.28 kB
JavaScript
(function($){
$.fn.artZoom = function(){
$(this).live('click', function(){
var maxImg = $(this).attr('href'),
viewImg = $(this).attr('rel').length === '0' ? $(this).attr('rel') : maxImg; // 如果连接含有rel属性,则新窗口打开的原图地址为此rel里面的地址
if ($(this).find('.loading').length == 0) $(this).append('<span class="loading" title="Loading..">Loading..</span>');
imgTool($(this), maxImg, viewImg);
return false;
});
// 图片预先加载
var loadImg = function (url, fn){
var img = new Image();
img.src = url;
if (img.complete){
fn.call(img);
}else{
img.onload = function(){
fn.call(img);
};
};
};
// 图片工具条
var imgTool = function(on, maxImg, viewImg) {
var width = 0,
height = 0,
tool = function(){
on.find('.loading').remove();
on.hide();
if (on.next('.artZoomBox').length != 0){
return on.next('.artZoomBox').show();
};
// 等比例限制宽度
var maxWidth = on.parent().innerWidth() - 12; // 获取父级元素宽度
if (width > maxWidth) {
height = maxWidth / width * height;
width = maxWidth;
};
var html = '<div class="artZoomBox"><div class="tool"><a class="hideImg" href="#" title="收起">收起</a><a class="imgLeft" href="#" title="向左转">向左转</a><a class="imgRight" href="#" title="向右转">向右转</a><a class="viewImg" href="' + viewImg + '" title="查看原图">查看原图</a></div><a href="' + viewImg + '" class="maxImgLink"> <img class="maxImg" width="' + width + '" height="' + height + '" src="' + maxImg + '" /></a></div>';
on.after(html);
var box = on.next('.artZoomBox');
box.hover(function(){
box.addClass('js_hover');
}, function(){
box.removeClass('js_hover');
});
box.find('a').bind('click', function(){
// 收起
if($(this).hasClass('hideImg') || $(this).hasClass('maxImgLink')) {
box.hide();
box.prev().show();
};
// 左旋转
if($(this).hasClass('imgLeft')) {
box.find('.maxImg').rotate('left')
};
// 右旋转
if($(this).hasClass('imgRight')) {
box.find('.maxImg').rotate('right')
};
// 新窗口打开
if($(this).hasClass('viewImg')) window.open(viewImg);
return false;
});
};
loadImg(maxImg, function(){
width = this.width;
height= this.height;
tool();
});
// 图片旋转
// 方案修改自:http://byzuo.com/
$.fn.rotate = function(p){
var img = $(this)[0],
n = img.getAttribute('step');
// 保存图片大小数据
if (!this.data('width') && !$(this).data('height')) {
this.data('width', img.width);
this.data('height', img.height);
};
if(n == null) n = 0;
if(p == 'left'){
(n == 3) ? n = 0 : n++;
}else if(p == 'right'){
(n == 0)? n = 3 : n--;
};
img.setAttribute('step', n);
// IE浏览器使用滤镜旋转
if(document.all) {
img.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ n +')';
// IE8高度设置
if ($.browser.version == 8) {
switch(n){
case 0:
this.parent().height('');
//this.height(this.data('height'));
break;
case 1:
this.parent().height(this.data('width') + 10);
//this.height(this.data('width'));
break;
case 2:
this.parent().height('');
//this.height(this.data('height'));
break;
case 3:
this.parent().height(this.data('width') + 10);
//this.height(this.data('width'));
break;
};
};
// 对现代浏览器写入HTML5的元素进行旋转: canvas
}else{
var c = this.next('canvas')[0];
if(this.next('canvas').length == 0){
this.css({'visibility': 'hidden', 'position': 'absolute'});
c = document.createElement('canvas');
c.setAttribute('class', 'maxImg canvas');
img.parentNode.appendChild(c);
}
var canvasContext = c.getContext('2d');
switch(n) {
default :
case 0 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(0 * Math.PI / 180);
canvasContext.drawImage(img, 0, 0);
break;
case 1 :
c.setAttribute('width', img.height);
c.setAttribute('height', img.width);
canvasContext.rotate(90 * Math.PI / 180);
canvasContext.drawImage(img, 0, -img.height);
break;
case 2 :
c.setAttribute('width', img.width);
c.setAttribute('height', img.height);
canvasContext.rotate(180 * Math.PI / 180);
canvasContext.drawImage(img, -img.width, -img.height);
break;
case 3 :
c.setAttribute('width', img.height);
c.setAttribute('height', img.width);
canvasContext.rotate(270 * Math.PI / 180);
canvasContext.drawImage(img, -img.width, 0);
break;
};
};
};
};
};
// 给所有含'artZoom'类的链接绑定本效果
$('a.artZoom').artZoom();
})(jQuery);