DHTML 中的绝对定位

2016-02-19 11:48 6 1 收藏

关注图老师设计创意栏目可以让大家能更好的了解电脑,知道有关于电脑的更多有趣教程,今天给大家分享DHTML 中的绝对定位教程,希望对大家能有一点小小的帮助。

【 tulaoshi.com - Web开发 】

下面的东西显示了在复杂的情况下,
怎样最好地在一个Element的旁边显示某个DIV。
当然,你可以滚动窗口,使这个按纽靠窗口的 左/上/右/下 的情况,观察菜单的弹出方位。
全部代码:
代码如下:
table border=1 cellpadding=8 cellspacing=0 
trtdtable1/tdtdtable1/td/tr 
trtdtable1/tdtd 
 div id=div1 style='position:absolute;background-color:wheat;padding:4px;' 
 div1 start 
 div id=div1button style='border:outset 2px;background-color:threedface;color:red;font-weight:bold;cursor:hand;padding:4px;' 
  ClickMe 
 /div 
 div1 end 
 /div 
 /td/tr 
/table 
div style='height:100px'-/div 
table border=1 cellpadding=8 cellspacing=0 
trtdtable2/tdtdtable2/td/tr 
trtdtable2/tdtd 
 div id=div2 style='position:relative;left:24px;background-color:wheat;' 
 div2 start 
 div id=div2menu style='display:none;position:absolute;background-color:lightgrey;height:200px;width:120px;border:outset 1px;padding:4px' 
  div2menubr 
  div2menubr 
  div2menubr 
  div2menubr 
  div2menubr 
 /div 
 div2 end 
 /div 
 /td/tr 
/table 
script language='jscript' 
//get the position of a element ( by the scroll offset ) 
function LostinetWebGetScrollPostion(e) 

 var b=e.document.body; 
 if(e==b)return {left:0,top:0}; 
 with(e.getBoundingClientRect()) 
 { 
  return {left:b.scrollLeft+left,top:b.scrollTop+top}; 
 } 

//get the position of a element ( by the client offset ) 
function LostinetWebGetClientPosition(e) 

 var b=e.document.body; 
 if(e==b)return {left:-b.scrollLeft,top:-b.scrollTop}; 
 with(e.getBoundingClientRect()) 
 { 
  return {left:left-b.clientLeft,top:top-b.clientTop}; 
 } 

//get absolute or relative parent 
function LostinetWebGetStandParent(e) 

 for(var p=e.parentElement;p!=null;p=p.parentElement) 
 { 
  var sp=p.currentStyle.position; 
  if(sp=='absolute'||sp=='relative') 
   return p; 
 } 
 return e.document.body; 

//calc the position of floate that relative to e 
function LostinetWebCalcPosition(floate,e) 

 var epos=LostinetWebGetScrollPostion(e); 
 var spos=LostinetWebGetScrollPostion(LostinetWebGetStandParent(floate)); 
 var s=LostinetWebGetStandParent(floate); 
 return {left:epos.left-spos.left-s.clientLeft,top:epos.top-spos.top-s.clientTop}; 

//get the best position to put the floate 
function LostinetWebAdjustMirror(floate,e,pos) 

 //c:Client,f:floate,e:e,p:floate's StandParent,m:Mirror 
 var cw=e.document.body.clientWidth; 
 var ch=e.document.body.clientHeight; 
 var fw=floate.offsetWidth; 
 var fh=floate.offsetHeight; 
 var ew=e.offsetWidth; 
 var eh=e.offsetHeight; 
 var ecpos=LostinetWebGetClientPosition(e); 
 var empos={left:ecpos.left+ew/2,top:ecpos.top+eh/2}; 
 var pcpos=LostinetWebGetClientPosition(LostinetWebGetStandParent(floate)); 
 var fcpos=LostinetWebGetClientPosition(floate); 
 var fmpos={left:pcpos.left+pos.left+fw/2,top:pcpos.top+pos.top+fh/2}; 
 //left--right 
 if( (fmpos.leftempos.left) ? ((fmpos.left-fw/20)&&((empos.left*2-fmpos.left)+fw/2=cw)) : ((fmpos.left+fw/2cw)&&((empos.left*2-fmpos.left)-fw/2=0)) ) 
  fmpos.left=empos.left*2-fmpos.left; 
 //top--bottom 
 if( (fmpos.topempos.top) ? ((fmpos.top-fh/20)&&((empos.top*2-fmpos.top)+fh/2=ch)) : ((fmpos.top+fh/2ch)&&((empos.top*2-fmpos.top)-fh/2=0)) ) 
  fmpos.top=empos.top*2-fmpos.top; 
 pos.left=fmpos.left-pcpos.left-fw/2; 
 pos.top=fmpos.top-pcpos.top-fh/2; 

document.attachEvent('onclick',function f() 

 if(div1button.contains(event.srcElement))return; 
 if(div2menu.contains(event.srcElement))return; 
 div2menu.runtimeStyle.display='none'; 
}); 
function div1button.onclick() 

 div2menu.runtimeStyle.display='block'; 
 var pos=LostinetWebCalcPosition(div2menu,div1button); 
 pos.top+=div1button.offsetHeight; 
 LostinetWebAdjustMirror(div2menu,div1button,pos); 
 div2menu.runtimeStyle.left=pos.left; 
 div2menu.runtimeStyle.top=pos.top; 

/script 

来源:http://www.tulaoshi.com/n/20160219/1598655.html

延伸阅读
绝对定位或浮动都能够用来实现分栏效果。二者可以独立使用,也可以结合在一起,相辅相成。 进入论坛参与讨论 但是,我们常用的布局并没有这么简单,除了三栏之外,我们还需要一个页头和一个页脚,如下图: 这时候,再用绝对定位布局就行不通了,因为绝对定位的元素会从文档流中完全移除,这时,页脚会紧挨着页头,显示在页头的下方。 如...
标签: Web开发
这篇文章继续前面发起的关于的话题,先前在描述关于自动定位的一些基本信息之后,我留下了一些可能用在布局中的方法,现在是时候讨论元素定位的改进问题了。 玩弄绝对定位元素于股掌之间 首先,回忆一下自动定位是如何触发的,设置绝对定位元素的left、top、right、bottom属性为默认的auto值,而不是给定长度值。当属性为auto值时,绝对...
IE 一如既往地带来问题。真的,我觉得 IE 坚持自己的一套无所谓,不支持或者不完全支持标准也无所谓。但是,IE6 IE7 IE8 这三个版本都有各自不同的表现,实在是太让人难受了。 前两天碰到了这个奇怪的问题: 绝对定位的元素,紧邻着两个浮动元素。Firefox 中一切正常,IE6 中绝对定位元素消失了。 解决方法:只要别让绝对定位元素紧邻浮动元...
标签: Web开发
定位一直是WEB标准应用中的难点,如果理不清楚定位那么可能应实现的效果实现不了,实现了的效果可能会走样。如果理清了定位的原理,那定位会让网页实现的更加完美。 定位的定义: 在CSS中关于定位的内容是:position:relative | absolute | static | fixed static 没有特别的设定,遵循基本的定位规定,不能通过z-index...
标签: Web开发
在CSS中,实现分栏布局有两种方法。第一种方法是使用四种CSS定位选项(absolute 、static、relative和fixed)中的绝对定位(absolute positioning),它可以将文档中的某个元素从其原本位置上移除,并重新定位在期望的任何地点之上。第二种则是使用CSS中的浮动(float)概念。 绝对定位或浮动都能够用来实现分栏效果。二者可以独立使用,也...

经验教程

175

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部