靈活實用的頁面廣告實例
目前,許多主頁上流行放置一個浮動層的廣告圖像(通常位於頁面右下方),顯示在文字層之上,當頁面上下滾動時,廣告圖像並不隨頁面滾動,它總能在窗口中保持一個固定位置。本程序就是這種廣告效果的一個實例,並在原有的基礎上增加了拖動功能,如果在浏覽頁面時需要觀察的內容正好被廣告圖像遮擋,可將廣告圖像拖到其它位置。並解決了圖像拖動中鼠標按鍵的Click動作與執行廣告圖像鏈接的Click動作之間的沖突。直接點擊廣告圖像即可執行圖像鏈接,而在圖像拖動過程中的鼠標按下和釋放的動作不會觸發廣告鏈接。這樣改進後,用戶在浏覽你的頁面時會感到更加方便、自然。
程序是由JavaScript腳本語言編寫的,並不復雜,為了節省文章篇幅起見,就不在此處對程序原理作過多的說明了,而是在後面的程序文檔中給出詳實的注釋語句。讀者通過閱讀注釋說明就會明了實現的原理,並可從中了解到如何在屏幕上定位圖像,拖動圖像等許多動態Html語句的編程方法。如果想直接使用這個程序,只要將演示頁面的相應內容復制到自己頁面內的對應位置就可以使用了。
程序文檔分為二個部分,dragtest.htm是演示用的主頁面程序,mydrag.JS是由主頁面調用的外部腳本程序文件,還使用了一個演示用的圖像文件:myimage.gif 。將主頁面文件、腳本文件和圖像文件放置在相同目錄下,就可正常使用。具體的程序文檔內容如下:
(一)·簡化的主頁面演示程序文檔:dragtest.htm
<Html>
<head>
<title>可拖動的廣告圖像演示頁面</title>
<meta http-equiv="Content-Type" content="text/Html; charset=gb2312">
<STYLE TYPE="text/CSS">
<!--
/*設定一個ID樣式,名稱中要包含DRAG字串,供程序識別可拖動元件用。*/
#elDRAGone {
position: absolute;
left: 600; top: 300;
color: red;
width: 120;
height:60;
z-index:3;
}
-->
</STYLE>
</HEAD>
</head>
<body bgcolor="#FFFFFF" >
<!-- 在DIV標記的屬性中指定前面設定的ID樣式。-->
<!-- 注意<a>標記中的onclick="return if_link();"事件語句, -->
<!-- 由它調用是否執行鏈接動作的判別函數,如果返回值為“假”, -->
<!-- 則不執行鏈接動作,反之則執行鏈接動作。-->
<DIV ID="elDRAGone"><a href="http://www.sohu.com" onclick="return if_link();"> <img src="myimage.gif" border="0" alt="可拖動到任意位置!"><a></DIV>
<SCRIPT LANGUAGE="Javascript">
/*連續輸出多個文字串,供頁面演示用。*/
for(i=0;i<50;i++){
document.write("這是一個“可拖動的廣告圖像”演示程序。<br><br>");
}
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript" src=mydrag.JS>
/*調用圖像拖動控制程序的外部腳本文件*/
/*注意此腳本的調用要放置在body區域的下部*/
</SCRIPT>
</body>
</Html>
(二)·由主頁面調用的外部腳本程序文檔:mydrag.JS
///////外部腳本控制程序開始///////
///////程序名:mydrag.JS ///////
//記錄頁面的垂直滾動位置的變量。
lastScrollY=0;
//在程序中校准圖像在頁面中的位置。
with (document.all.elDRAGone) {
style.pixelTop=offsetTop;
style.pixelLeft=offsetLeft;
}
//在頁面上定位圖像的函數。
function position_img() {
//計算出頁面垂直滾動的偏移量。
diffY = document.body.scrollTop-lastScrollY;
//保存本次頁面滾動位置。
lastScrollY=document.body.scrollTop;
//移動圖像到原來的窗口位置。
document.all.elDRAGone.style.pixelTop += diffY;
}
//建立記錄圖像初始位置的變量,用於計算圖像是否被拖動過。
originX=originY=0;
//如果圖像被拖動過,則offset_pixel變量的值大於0。
offset_pixel=0;
//記錄圖像在文檔中的現行坐標值。
currentX = currentY = 0;
//保存被拖動對象的變量。
whichEl = null;
//onmousedown事件調用的圖像抓取函數。
function grabEl() {
//只允許用鼠標左鍵拖動!
if (event.button !=1) {return;}
//將鼠標點擊的對象存入whichEl變量。
whichEl=event.srcElement;
//判斷是否為可拖動的對象。
while(whichEl.id.indexOf("DRAG")==-1){
whichEl=whichEl.parentElement;
if (whichEl==null){return;}
}
//記錄圖像抓取時的初始窗口位置。
originX=event.clIEntX;
originY=event.clIEntY;
//將拖動判別變量設為0值。
offset_pixel=0;
//校准圖像在文檔上的位置。
whichEl.style.pixelLeft=whichEl.offsetLeft;
whichEl.style.pixelTop=whichEl.offsetTop;
//記錄圖像相對於文檔的現行位置坐標。
currentX=event.clIEntX+document.body.scrollLeft;
currentY=event.clIEntY+document.body.scrollTop;
}
//onmousemove事件調用的圖像移動函數。
function moveEl() {
//如果沒有抓取拖動的對象,則返回。
if (whichEl==null){return;}
//如果拖動了圖像,則將變量offset_pixel
//賦予大於0的值,以標記圖像已被拖動。
//從而使圖像在拖動完成後不執行鏈接功能。
offset_X=Math.abs(event.clIEntX-originX);
offset_Y=Math.abs(event.clIEntY-originY);
offset_pixel=offset_X+offset_Y;
//計算拖動時新的文檔坐標的位置。
newX=event.clIEntX+document.body.scrollLeft;
newY=event.clIEntY+document.body.scrollTop;
//計算出現行位置與拖動前初始位置的偏差。
distanceX=newX-currentX;
distanceY=newY-currentY;
//用現行位置更新初始位置變量。
currentX=newX;
currentY=newY;
//實際移動圖像的位置。
whichEl.style.pixelLeft +=distanceX;
whichEl.style.pixelTop +=distanceY;
event.returnValue=false;
}
//onmouseup函數調用的圖像放置函數。
//表明拖動過程結束。
function dropEl() {
whichEl=null;
}
//根據圖像是否被拖動過來決定是否執行
//與圖像有關的鏈接。
function if_link(){
if(offset_pixel>0)
//如果圖像被拖動過,則此函數返回假,
//不執行與圖像有關的鏈接。
return false;
else
//否則返回真值,執行圖像的鏈接。
return true;
}
//改變可拖動對象為十字光標的句柄函數。
function curEl(){
Over_Element=event.srcElement;
while(Over_Element.id.indexOf("DRAG")==-1){
Over_Element=Over_Element.parentElement;
if (Over_Element==null){return;}
}
event.srcElement.style.cursor = "move";
}
//以下是在文檔中設定的鼠標事件句柄。
document.onmousedown = grabEl;
document.onmousemove = moveEl;
document.onmouseup = dropEl;
document.onmouSEOver = curEl;
//定時調用圖像移動函數,此時為1秒。
action = window.setInterval("position_img()",1000);
//////////外部腳本控制程序結束//////////////////
本程序在IE 4.0以上版本的浏覽器下使用通過。