用DIV模拟弹出窗口--窗体滚动跟随--丁学

复制以下代码直接写到记事本里保存成html文件即可看到效果 IE6、IE7、FF2兼容,其他浏览器未测试
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>丁学-博客园-http://www.cnblogs.com/dingxue</title>
<script>
function getPosition() {
      var top    = document.documentElement.scrollTop;
      var left   = document.documentElement.scrollLeft;
      var height = document.documentElement.clientHeight;
      var width  = document.documentElement.clientWidth;
      return {top:top,left:left,height:height,width:width};
}

function showPop(){
	var width  = 300;  //弹出框的宽度
	var height = 160;  //弹出框的高度
	var obj    = document.getElementById("pop");
	
	obj.style.display  = "block";
	obj.style.position = "absolute";
	obj.style.zindex   = "999";
	obj.style.width    = width + "px";
	obj.style.height   = height + "px";
	
	var Position = getPosition();
	leftadd = (Position.width-width)/2;
	topadd  = (Position.height-height)/2;
	obj.style.top  = (Position.top  + topadd)  + "px";
	obj.style.left = (Position.left + leftadd) + "px";
	
	window.onscroll = function (){
		var Position   = getPosition();
		obj.style.top  = (Position.top  + topadd)  +"px";
		obj.style.left = (Position.left + leftadd) +"px";
	};
}

function hidePop(){
	document.getElementById("pop").style.display = "none";
}
</script>
</head>
<body>
丁学--博客园--http://www.cnblogs.com/dingxue
<div id="pop" style="border:1px solid #CCC;display:none;">test<br><a href="javascript:hidePop();" mce_href="javascript:hidePop();">hide</a></div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<a href="javascript:showPop()" mce_href="javascript:showPop()">show</a>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>
</html>
版权声明:本文原创发表于博客园,作者为丁学
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
posted @ 2007-09-03 08:42 丁学 阅读(1671) 评论(10)  编辑 收藏 所属分类: WEB技术

  回复  引用  查看    
#1楼 2007-09-03 11:31 | ╃小〥斌╄      
窗体跟随的意思是啥? 是窗体在中间不动吗? 我用IE7 FF 测了 是滴 。 不过有点抖动。 影响效果哦。
  回复  引用  查看    
#2楼 [楼主]2007-09-03 13:34 | 丁学      
@╃小〥斌╄
这个没办法了,抖动解决不了,尝试过很多种办法,没有一种可行的
  回复  引用  查看    
#3楼 2007-09-03 13:40 | ╃小〥斌╄      
我想如果可以平滑处理 也许视觉上可以好一点 , 比如用 setInterval ?
  回复  引用  查看    
#4楼 2007-09-03 17:10 | 代码乱了      
哈哈,看一下我做的这个,已经封装成控件了http://www.selfweb.cn/messagebox/Default.aspx
  回复  引用  查看    
#5楼 [楼主]2007-09-03 20:27 | 丁学      
@代码乱了
如果是客户端即时响应就好了,你那个服务器速度有点慢,点了之后要等一下才有反应
  回复  引用  查看    
#6楼 2007-09-04 10:22 | 代码乱了      
@丁学
客户端很容易了
主要有时候需要在服务器端挂接事件什么的
  回复  引用  查看    
#7楼 [楼主]2007-09-04 16:42 | 丁学      
@代码乱了
这种框仅用在客户端的情况还是比较少的,一般都会和服务器端产生交互,但这时候你边DIV模拟窗口都用了,再刷新页面有些说不过去,ajax吧
  回复  引用    
#8楼 2007-09-20 17:45 | CCCCCCCC [未注册用户]
今天试了一下,但有个问题,就是弹出窗口的位置...不好确定

如果弹出窗口宽度过大,而主窗口又处于还原模式呈现状态。那么就会出现一直向右拉滚动条,但弹出窗口也向右滚动了,也就是怎么也不能完全的看到弹出窗口的内容。
  回复  引用  查看    
#9楼 2007-09-26 19:55 | 耿小超      
</pre>是干什么用的?我把它删了后页面也没什么变化呀?
  回复  引用  查看    
#10楼 [楼主]2007-09-28 06:37 | 丁学      
@耿小超
呵呵,pre是用来按原格式显示HTML的,不想打开头那一堆空格,所以使用了pre,最后一个pre是转换<为&lt;时多转了一个,现在已经删除掉了

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-18 09:35 编辑过
 
另存  打印