当前位置: 代码迷 >> Web前端 >> 仿QQ空间图片弹出成效
  详细解决方案

仿QQ空间图片弹出成效

热度:115   发布时间:2012-10-10 13:58:11.0
仿QQ空间图片弹出效果

参考网上代码,自己做了一个仿QQ空间图片弹出效果,但现在还无法在弹出层切换图片。

以下是js代码:

function imageShow(which_click) {
		var image_path = which_click.src;
		//alert(image_path);
		var tag_top = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
		
		//创建底层灰色DIV
		var index_tag = document.createElement("div");
		index_tag.style.cssText = "width:100%;height:"+Math.max(document.body.clientHeight,document.body.offsetHeight,document.documentElement.clientHeight)+"px;position:absolute;background:black;top:0;filter: Alpha(Opacity=80);Opacity:0.8;";
		document.body.appendChild(index_tag);
		index_tag.ondblclick = closeIndexTag;
		
		//创建图片DIV
		var img_tag = document.createElement("div");
		img_tag.style.cssText = "font:12px /18px verdana;overflow:auto;text-align:center;position:absolute;width:200px;border:5px solid white;background:white;color:white;left:"+(parseInt(document.body.offsetWidth)/2-100)+"px;top:"+(document.documentElement.clientHeight/3+tag_top)+"px;";
		img_tag.innerHTML = "<div style='padding:10px;background:#cccccc;border:1px solid white'><img src='images/loading.gif' /><br /><br /><b style='color:#999999;font-weight:normal'>Image loading...</b><br /></div>";
		img_tag.oncontextmenu = function() {
			var clsOK=confirm("是否确定关闭图片显示"); 
			if(clsOK)
				closeIndexTag();
			return false;
		}
		img_tag.onmousemove = barDidplay;
		document.body.appendChild(img_tag);
		
		//构建图片关闭按钮
		var close_tag = document.createElement("div");
		close_tag.style.cssText = "display:none;position:absolute;left:10px;top:10px;color:black;";
		close_tag.innerHTML = "<b style='background:red;border:1px solid white;filter:Alpha(Opacity=50);Opacity:0.5;cursor:pointer;'>&nbsp;关闭&nbsp;</b>";
		close_tag.onclick = closeIndexTag;
		
		var img = new Image();
		img.src = image_path;
		img.style.cssText = "border:1px solid #cccccc;filter: Alpha(Opacity=0);Opacity:0;cursor:pointer";
		img.onload = imgOK();
		
		function imgOK() {
			var temp = 0;
			
			var stop_x = false;
			var stop_y = false;
			var img_tag_x = img_tag.offsetWidth;
			var img_tag_y = img_tag.offsetHeight;
			var img_x = img.width;
			var img_y = img.height;
			var scroll_x=document.documentElement.clientWidth;
			var scroll_y=window.innerHeight||document.documentElement.clientHeight;
			var yy = 0;
			var xx = 0;
			if(img_y > scroll_y || img_x > scroll_x){
				yy = scroll_y - 100;
				xx = (img_x / img_y) * yy;
			}else{
				xx = img_x + 4;
				yy = img_y + 3;
			}
			img.style.width=xx-4+'px';
			img.style.height=yy-3+'px';
			
			var maxTime = setInterval(function() {
				temp += 30;
				if((img_tag_x + temp) < xx) {
					img_tag.style.width = (img_tag_x + temp) + "px";
					img_tag.style.left = (scroll_x - img_tag_x - temp)/2 + "px";
				} else {
					stop_x = true;
					img_tag.style.width = xx + "px";
					img_tag.style.left = (scroll_x - xx)/2 + "px";
				}
				if((img_tag_y + temp) < yy) {
					img_tag.style.height = (img_tag_y + temp) + "px";
					img_tag.style.top = (tag_top + (scroll_y - img_tag_y - temp)/2) + "px";
				} else {
					stop_y = true;
					img_tag.style.height = yy + "px";
					img_tag.style.top = (tag_top + (scroll_y - yy)/2) + "px";
				}
				if(stop_x && stop_y) {
					clearInterval(maxTime);
					img_tag.appendChild(img);
					temp = 0;
					imgOpacity(temp);
				}
			}, 1);
			img_tag.innerHTML="";
			img_tag.appendChild(close_tag);
		}		
		
		function closeIndexTag() {
			document.body.removeChild(index_tag);
			document.body.removeChild(img_tag);
		}
		
		function imgOpacity(temp_imgOpacity) {
					var temp = temp_imgOpacity;
					temp += 10;
					img.style.filter = "alpha(opacity=" + temp + ")";
					img.style.opacity = temp/100;
					var imgTime = setTimeout(function() {imgOpacity(temp);}, 10);
					if(temp > 100)
						clearTimeout(imgTime);
		}
		
		var bar_show;
		function barDidplay(){
			clearTimeout(bar_show);
			close_tag.style.display = "block";
			bar_show = setTimeout(function() {close_tag.style.display = "none"}, 1000);
		}
}

?

12 楼 snowstone 2011-02-20  
2.在loading时候,div 灰色的层占满屏幕,但是如果页面很长,灰色的div就无法遮罩全部了.
13 楼 yangleilt 2011-02-21  
snowstone 写道
2.在loading时候,div 灰色的层占满屏幕,但是如果页面很长,灰色的div就无法遮罩全部了.

例子挺好 功能不全自己不会改改呀!
14 楼 抢街饭 2011-02-21  
首先感谢楼主 看见你这个列子 我颇受启发 就是在火狐加载有点慢
15 楼 sbzk 2011-02-21  
snowstone 写道
2.在loading时候,div 灰色的层占满屏幕,但是如果页面很长,灰色的div就无法遮罩全部了.


clientHeight换成scrollheight
16 楼 TonyBug 2011-02-21  
里面存在脚本错误,上面所有楼上面的大虾们都没有发现吗?在火狐浏览器下面执行是没有错的,但是在IE下面执行就报脚本错误。请用IE8试试就可以到脚本错误了。错误的大致内容是尚未实现。
17 楼 satanultra 2011-02-21  
用心了         
18 楼 dir_murong 2011-02-22  
做的不错 赞一个
19 楼 andyfish915 2011-02-23  
是的,做得真不错,大家需要用的也可以在这基础上改改,和楼主交流交流
20 楼 jiahch 2011-02-24  

colorbox!
21 楼 bn922 2011-03-03  
菜鸟,怎么图片很多 弹出的图片居中 但页面跑到顶部去了 要让他显示在弹出的图片那里 怎么改?
22 楼 tanchong 2011-03-03  
[html]
    [span]aaaa[/span]
[/html]
23 楼 yjhailsl 2011-03-11  
刚下了,很不错,不过 杨幂的qq号是真  的不是?
24 楼 wj6175256 2011-04-29  
很强大,学习学习!
25 楼 ws347575294 2011-05-05  
不错啊 ,学习了。。
26 楼 4268146 2011-05-06  
呵,我先看看……可以的话,当然要支持一下了
27 楼 小手冰凉 2011-05-13  
挺不错的。感谢
28 楼 gongrunlian 2011-05-16  
虽然有点小bug但还是很不错的,加油,向你学习
29 楼 Dev|il 2011-05-17  
没图,求真相
30 楼 Dev|il 2011-05-17  
nnnnn分vcxzcv
31 楼 alask2011 2011-05-17  
要是能切换图片就好了,楼主努力尝试下
  相关解决方案