這幾天被一個工作上的問題給困擾住了,小弟寫的網頁需要當滑鼠停在會員名字上或是會員的照片上時,要出現該會員的簡介。這功能原本不算太難,用小弟之前的方法,光用 css 就可以辦的很好。但是當套用在用會員照片排成的九宮格狀時,在 ie6 下會員名片會被隔壁的照片壓在下面弄的支離破碎,但是在 firefox 下卻仍有很好的表現。
慘不忍睹的 ie6 表現狀況:
firefox 下的狀況正是我所要的:
但是我不能犧牲使用比例還是最多的 ie6 使用者,所以只得另謀他法了,有朋友介紹我使用
[jQuery] bgiframe Plugin,不過我現在情況很趕,無法仔系去鑽研 jQuery,那可得等我過年有空時慢慢去研究,我現在能用的便是 javascript 和 css 了,我試了一天後終於給我弄出來了。這想穿了其實也沒什麼高明之處,就是得花時間想一下。
首先在整個 程式最末端埋入一整段會員名片的程式碼,
<div style="position: absolute; width: 220px; height: 140px; z-index: 1;
left: -1000px; top: -1000px" id="mycard">
<table border="1" cellpadding="0" style="border-collapse: collapse"
width="220" id="table3"
height="140" bordercolor="#76A9B4">
<tr>
<td id="carddata" bgcolor="#E1F7F7">
<table width="220" height="140" border="0"
cellpadding="0" cellspacing="10" bgcolor="#E1F7F7">
<tr>
<td height="66" valign="top" align="center">
<table width="100%" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td width="66" valign="top" align="center">
<table width="66" height="66" border="0"
cellpadding="0" cellspacing="0" bgcolor="#418488">
<tr>
<td align="center"><img id="pic2" src=""
width="60" height="60"></td>
</tr>
</table>
</td>
<td width="8"> </td>
<td valign="top"><table width="100%" height="22"
border="0" cellpadding="0"
cellspacing="0" bgcolor="#C0E2DF">
<tr>
<td width="5"> </td>
<td valign="bottom"><span class="MwordCL01"
id='username'></span> -<span class="Sword02"
id="sexname"></span></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0"
cellpadding="0">
<tr>
<td width="5" height="24"> </td>
<td height="24" valign="bottom">
<span class="Sword02">層級:</span>
<span class="Sword02" id="attname"></span></td>
</tr>
<tr>
<td width="5" height="19"> </td>
<td height="19" valign="bottom">
<span class="Sword02">區域:</span>
<span class="Sword02" id="codename"></span></td>
</tr>
</table> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="SwordCL01">
<table width="100%" border="0"
cellspacing="0" cellpadding="0">
<tr>
<td width="70" height="19" align="right"
class="SwordCL01">健康部落:</td>
<td height="19" class="Sword01"><nobr>
<? if ( strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")) { ?>
<span style="width:130;text-overflow: ellipsis;overflow: hidden;"
id="vip_name"></span></nobr></td>
<? }else{ ?>
<div style="width:130;text-overflow: ellipsis;overflow: hidden;"
id="vip_name"></div></nobr></td>
<? } ?>
</tr>
<tr>
<td width="70" height="19" align="right"
class="SwordCL01">發表篇數:</td>
<td height="19" class="Sword01" id="doccnt">
<span class="Sword01">篇</span></td>
</tr>
</table></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
因為我需要在整個網站到處都會用到這個會員名片,所以我是把它單獨寫成一斷的程式,然後在每一隻需要用的程式末端下
<?include('Common/card.phtml');?>
</div>
</body>
</html>
然後另外再寫一支的放滿我需要的 junction 的 js ,也是方便每隻需要用到會員名片的程式來 call !
<script language="javascript" src="/Js/feijer.js"></script>
其內容如下 :
function CardShow(obj,ty,lx,pic2,username,sexname,attname,codename,vip_name,doccnt){
enoter_IsBoard = 1;
if(enoter_IsBoard){
var enoter_demo = document.getElementById("mycard").style;
var leftNum,topNum;
enoter_demo.visibility="visible";
document.getElementById("pic2").src = pic2;
document.getElementById("username").innerHTML = username;
document.getElementById("sexname").innerHTML = sexname;
document.getElementById("attname").innerHTML = attname;
document.getElementById("codename").innerHTML = codename;
document.getElementById("vip_name").innerHTML = vip_name;
document.getElementById("doccnt").innerHTML = doccnt;
var _x = getObjX(obj);
var _y = getObjY(obj);
leftNum=19;
topNum=0;
document.getElementById("mycard").style.left = Number(_x) + lx +"px";
document.getElementById("mycard").style.top = Number(_y) + ty +"px";
}
}
function getObjX(obj){
var hlcleft = 0;
if (obj.offsetParent){
while (obj.offsetParent){
hlcleft += obj.offsetLeft;
obj = obj.offsetParent;
}
}else if (obj.x) hlcleft += obj.x;
return hlcleft;
}
function getObjY(obj){
var hlctop = 0;
if (obj.offsetParent){
while (obj.offsetParent){
hlctop += obj.offsetTop;
obj = obj.offsetParent;
}
}else if (obj.y)hlctop += obj.y;
return hlctop;
}
function CardClose(){
document.getElementById("mycard").style.left=-1000+"px";
document.getElementById("mycard").style.top=-1000+"px";
}
然後程式需要的地方,除了把值傳進去 function ,並可以指定名片視窗要出現在 父容器的那邊,因為有時那個名片太靠右邊時,會被畫面切割掉,這時就可以調整 ty lx 兩個值來指定七其位置。
<a href="<?=$Blog;?>"
onmouseover="CardShow(this,30,60,'<?=$pic2;?>','<?=$username;?>','<?=$sexname;?>',
'<?=$attname;?>','<?=$codename;?>',
'<?=$vip_name;?>','<?=$doccnt;?>');"
onmouseout="CardClose();">
所以當 onmouseover 被觸發時,便去 call js 中的 CardShow function ,再一一的將資料放會員名片中,如此便可以將名片無誤的在想要的地方去呈現。
沒有留言:
張貼留言