jquery 图片放大功能如何做?

2017-12-17 13:55:46 +08:00
 3023369823

花了很长时间撸了个网站,观点,其中需要一个图片放大功能,网上找了半天发现都没有中意的,最后无奈之下自己写了一个,演示地址,自我感觉效果还不错,现在分享开来给大家看看,哪里不好还请多多指教,谢谢大家。

css 部分:

.zoomify-dialog-pic {
	 position: fixed;
	 top: 0;
	 bottom: 0;
	 left: 0;
	 right: 0;
	 background: rgba(0,0,0,0.35);
	 z-index: 99999;
	 display: none;
}

.zoomify-dialog-pic .dialog-body {
	 
	  position:absolute;
	  width: 100%;
	  max-width: 250px;
	  max-height: 300px;
	  margin-top:-150px;/*div 高度的一半*/
      margin-left:-125px;/*div 宽度的一半*/
	  top:50%;
	  left:50%;
	  padding:10px;
	  border-radius:5px;
	  background: white;
}
	 
.zoomify-dialog-pic .dialog-body img {
	 width: 100%;
}

.magnifier {
  cursor: -moz-zoom-out;
  cursor: -webkit-zoom-out;
  cursor: zoom-out;
  cursor:url('icon/magnifier.ico'),auto;
}

.un-magnifier {
  cursor: -moz-zoom-in;
  cursor: -webkit-zoom-in;
  cursor: zoom-in;
  cursor:url('icon/unmagnifier.ico'),auto;
}

说明下,上面 css 的 cursor:url 请放到自己的图片服务器上,万恶的 IE 不支持本地

js 部分:

var ROOT = $("input[name='globalPath']").val();

function zoomOut(orginImg,times){
	
	var obj=$(".zoomify-dialog-pic .dialog-body");
	var img=$(".zoomify-dialog-pic .dialog-body img");

	var imgW=$(orginImg).width();
	var imgH=$(orginImg).height();

	var newH=imgH*times;
	var newW=imgW*times;
	
	var bodyH=$("body").height();
	var bodyW=$("body").width();
	
	if(newW>bodyW){
		newW=bodyW-40;
		obj.css("padding","5px");
	}
	
	if(newH>bodyH){
		newH=bodyH-40;
		obj.css("padding","5px");
	}
	
	//图片新高度、宽度
	img.css("width",newW+"px");
	img.css("height",newH+"px");
	
	//容器新高度、宽度,因为图片放大了,所以容器也必须放大
	//不要用 padding 属性,ie 下不支持
	var padding=parseInt(obj.css("padding-top"));
	
	cWith=newW+padding*2;
	cHeight=newH+padding*2;
	
	obj.css("max-width",cWith+"px");
	obj.css("max-height",cHeight+"px");
	
	obj.css("margin-left",(cWith/2)*-1+"px");
	obj.css("margin-top",(cHeight/2)*-1+"px");
}

function insertPic(url){
	html='<div class="zoomify-dialog-pic">'+
		'<div class="dialog-body">'+
			'<img src="'+url+'" class="un-magnifier">'+
		'</div>'+
	'</div>';
	return html;
}

$(".page-content-l").on('click','p img',function(){

	var url=$(this).attr('src');
	html=insertPic(url);
	$("body").append(html);
	
	zoomOut(this,1.2);
	$(".zoomify-dialog-pic").show();
});

$("html").on('click','.zoomify-dialog-pic',function(){
	$(this).remove();
});

$(".page-content-l").on("mouseover mouseout","p img",function(event){
	if(event.type == "mouseover"){
		$(this).addClass("magnifier");
	}else if(event.type == "mouseout"){
		$(this).removeClass("magnifier");
	}
}); 

代码是毫无保留公开,绝对可以使用的,喜欢给我点个赞,也可以加我的 qq 群交流:284205104,谢谢您的阅读。

1743 次点击
所在节点    程序员
1 条回复
swordne
2017-12-18 09:16:17 +08:00
话说,这种,layer 什么的不都有么。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/415442

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX