生成浮动层的接口知识总结


我们在做应用开发时很经常地要生成浮动层,里面显示一些我们需要显示的内容。这里写一个生成浮动层的接口。如下:

  Js代码

 function minimizeExec(floatLyrComm){ 
 var execObjCnt = $(floatLyrComm+"Cnt"); 
 var execObjDiv = $(floatLyrComm); 
 var eventElement = event.srcElement || event.target; 
 if(execObjCnt.style.display==''){ 
  execObjCnt.style.display = 'none'; 
  eventElement.innerText = "□"; 
  execObjDiv.style.height = '20px'; 
 }else if(execObjCnt.style.display=='none'){ 
  execObjCnt.style.display = ''; 
  eventElement.innerText = "-"; 
 } 
 } 
 /*************************************************************************************/ 
 /* 
 /*   文档追加类(目前用于生成浮动层) 
 /* 
 /*************************************************************************************/ 
function DocWriteGen(){ 
} 
DocWriteGen.prototype={ 
 /** 
 * purpose:生成浮动层 
 * author:liugx 
 * remark: 
 */ 
 genFloatLyr:function(floatLyrId,floatLyrPro){ 
 var floatdiv = document.createElement("div"); 
 floatdiv.id = floatLyrId; 
 floatdiv.className = "float-lyr"; 
 floatdiv.style.position = "absolute"; 
 //floatdiv.style.left = floatLyrPro.left?floatLyrPro.left:"0px"; 
 floatdiv.style.left = floatLyrPro.left||"0px"; 
 floatdiv.style.top = floatLyrPro.top||"0px"; 
 floatdiv.style.width = floatLyrPro.width||"200px"; 
 floatdiv.style.height = floatLyrPro.height||"100px"; 
 if(floatLyrPro.opacity){ 
  floatdiv.style.opacity = floatLyrPro.opacity; 
  floatdiv.style.filter = 'alpha(opacity=' + parseInt(parseFloat(floatLyrPro.opacity)*100) + ')'; 
 } 
 floatdiv.style.borderColor = floatLyrPro.borderColor||"#6495ED"; 
 floatdiv.style.display = 'none'; 
 trColor = floatLyrPro.trColor||"#6495ED"; 
 tdTitle = floatLyrPro.tdTitle||""; 
 floatdiv.innerHTML = '<table width="100%" height="100%" boder="0" cellspacing="0" cellpadding="0">' + 
    '<tr style="background-color:' + trColor + '">'+ 
    '<td height="20" width="96%" style="color:#FFFFFF" onmouseover="this.style.cursor=\'hand\';"'+ 
     'onmousedown="Element.move(document.getElementById(\''+floatdiv.id+'\'),event);">'+tdTitle+'</td>' + 
     '<td width="2%" style="color:#FFFFFF;cursor:hand" onclick="minimizeExec(\''+floatdiv.id+'\')">-</td>' + 
     '<td width="2%" style="color:#FFFFFF;cursor:hand" onclick="document.getElementById(\''+floatdiv.id+'\').style.display=\'none\'">×</td>' + 
    '</tr>' + 
    '<tr>' + 
     '<td colspan="3" valign="top"><div id="'+floatdiv.id+'Cnt"></div></td>' + 
    '</tr>' + 
    '</table>'; 
 return floatdiv; 
 } 
} 
var docWriteGen = new DocWriteGen();

以上代码要注意的地方如下:

  1.    以上我们先createElement一个DIV元素,然后设置它的一些如id、className、left、top、height、width、opacity、borderColor等属性。再设置它的innerHTML。最后返回这个DIV元素。其实,我们也可以不createElement一个DIV元素再设置它的属性的方法,而是直接用构造html的方法来生成div,一些需要传入的参数只把写在相应的地方用参数来替换就行了。就像设置它的innerHTML时用的方法一样。其实,不管是用createElement一个DIV元素的方法,还是构造HTML的方法,两种方法的实现效果是一样的。当然,如果createElement较好实现并且需要对这个生成的元素进行额外的处理的话,用这种方法比较好,且在它生成元素后,常与appendChild一起使用,把生成的元素加载到另一个元素中,如DIV元素中进行显示的控制。而用构造HTML方法的话,更多的是用于显示,并不需要对生成的元素进行额外的处理。

  2.      以上代码中:

  //floatdiv.style.left=floatLyrPro.left?floatLyrPro.left:"0px";

  floatdiv.style.left = floatLyrPro.left||"0px";

  的写法是一样的,我们常用第二种方式的写法,这在当传入的参数为对象时,用于判断对象的属性是否存在的处理很常用。

  3.      注意什么时候是传floatdiv,什么时候是传floatdiv.id如:

  document.getElementById(\''+floatdiv.id+'\')

  这里显然不能传floatdiv,因为floatdiv是一个obj,如果外面再嵌一个document.getElementById就有问题了,这时候应该传的是floatdiv.id,这点容易写错。

  4.      对于Element.move()方法,就是拖运DIV,读者可以自行参考这方面的资料,有空再做个整理。
5.      我们可以两种方式来使用接口,一种把生成对象的outerHTML赋值给一个需要替换显示的元素,如下:

  Js代码

     var floatdiv = documentWriteGen.genFloatLyr('floatLyrId',{left:200,top:200,height:200,width:400,tdTitle:"浮动层标题:"}); 
     floatdiv.style.display = ''; 
     $("formWrapper").innerHTML = floatdiv.outerHTML;
 

  另一种是用在文档的末尾用document.write(),为什么要在文档的末尾用,这里大家要明白document.write()写在任何位置,则从任何位置的文档中开始加载。

  6. 在minimizeExec()方法中要注意的如下:

  1.在最小化中除了要把内容div设置为不显示外,同时还必须要把整个div的高度设置为只有标题的TR的高度。如果只设置内容div设置为不显示,整个div并不会缩起来,而如果只设置整个div的高度,因为内容div有内容,它并不会根据你设置的高度来显示。

  2.我们在点击最小或最大时,这里触发一个事件,利用event.srcElement || event.target得到事件元素,并设置它的innerText为需要显示的图标。这个知识点需要明白。

  7.      在做dhmtl里,我们常常需要用到的方法有如下innerHTML、innerText、outerHTML、outerText,写了如下程序加以理解:

  Html代码

<html> 
<head> 
<script type="text/javascript"> 
function test(){ 
   var eleobj = document.createElement('o'); 
   var textobj = document.createTextNode('eleobjtext') 
   eleobj.appendChild(textobj); 
   eleobj.setAttribute('name','eleobjname'); 
   document.getElementById('testdiv').appendChild(eleobj); 
   } 
</script> 
</head> 
<body> 
<div id="testdiv"> 
<table><tr><td>table content</td></tr></table> 
</div> 
<input type="button" value="outerHTML" onclick="alert(document.getElementById('testdiv').outerHTML)"/> 
<input type="button" value="outerText" onclick="alert(document.getElementById('testdiv').outerText)"/> 
<input type="button" value="innerHTML" onclick="alert(document.getElementById('testdiv').innerHTML)"/> 
<input type="button" value="innerText" onclick="alert(document.getElementById('testdiv').innerText)"/> 
<input type="button" value="test" onclick="test();"/> 
</body> 
</html> 
 


  8.注意这句话:floatdiv.style.position = "absolute";把浮动层的定位设置成absolute,如果没有这句,所有设置的left和top的值都是没有效果的。关于定位的相关知识可参见另一个帖子“关于DHMTL的定位”。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3