大家知道,豐富多彩的Web網路課件離不開圖片的支持,圖像在增加網頁生動性的同時,也增加了網頁的大小,使下載速度減慢。在網站中如何讓一張圖片能以適當大小在頁面上顯示是值得研究的問題。為此,筆者把自己的一些經驗寫出來供廣大從事腳本編寫者參考,以此共勉。
需求分析:本網站採用新聞管理系統,首頁新聞欄位中,需要從資料庫中呼叫圖片檔案作為圖片新聞中的圖片,從而形成文字繞排形式。根據佈局需要,圖片的寬度不能超過200px。
要讓圖片以適當大小顯示的問題,實質是一個大圖片等比例縮小的問題。如何透過圖像的URL獲得圖像的大小(width,height)是問題的關鍵,假設k=Width/Height表示圖像的比例值,當K>=1時,只要width不超過200px,則height一定<= 200px;相反K<1,只要Height不超過150Px,width一定<=150px(正常情況下width:height=4:3)。所以只要K>=1限定width,K<1限定height就可以了。
方案一:使用javascript的Image()物件動態載入圖片,取得圖片的高度和寬度。
<scriptlanguage="JavaScript" type="text/javascript"> <!--varimgObj;function checkImg(theURL){var width,height;var k;imgObj =new Image(); //创建对象; imgObj.src = theURL; if (typeof(imgObj) =="object"){if ((imgObj.width != 0) && (imgObj.height != 0)){width=imgObj.width; //是否已取得了图像的宽度; height=imgObj.height; //是否已取得了图像的高度; k=width/height; //获取图像比例值; if(k>=1){ if (width>=200){ width=200; height=width/k; }} else {if (height>=200){ height=200; width=k?height; } } showimg(theURL,width,height); } else setTimeout("checkImg('" + theURL + "')", 100) //通过Image对象动态装载图片,不可能立即得到图片的宽度和高度,所以每隔100毫秒重复调用检查。 } } functionshowimg(theURL,x,y){document.write("<imgsrc="+theURL+""+"width="+x+""+"height="+y+"border='0'"+""+"align='left'>");} //--> </script> <scriptlanguage="javascript">checkImg("Bt0085.jpg"); </script>
結果:將程式碼移植到首頁檔案(default.asp)中,然後通過伺服器測試的時候就出現了問題。輸入網址的時候,瀏覽器中先出現的是已經處理好後的圖片,點擊工具列上的「後退」才出現了首頁頁面內容。再次測試,結果正常。每次更新圖片的時候會出現同樣的現象,或是每開啟一台未造訪過本網站的電腦也會出現同樣問題。
原因分析:Image()物件的特性,主要用來實現圖片翻滾效果,可以提前下載圖片到客戶端,讓圖片之間的切換沒有時間延遲。如下邊的程式碼一樣,使用 Image物件的 src 屬性來指定圖片的路徑 (URL),這樣就將 images 目錄下的圖片 pic2.gif 下載到客戶端了。 var myImg = newImage();myImg.src = "pic.gif";
這段程式碼將迫使瀏覽器開始從伺服器下載指定的圖片,如果客戶端的快取(Cache)中有這個圖片的話,瀏覽器會自動將其覆寫。那樣,當使用者將滑鼠移到圖片上邊的時候,圖片將會立即變換,不會有時間的延遲。所以如果第一次顯示圖片後,第二次就能正常顯示首頁檔案就是這個原因了。由此,我得出不能用Image()物件取得影像的屬性這個結論,應該改變解決問題的方案。
方案二:使用中的ID,定義圖的寬度和高度
頁面的元素可以定義其顯示範圍,即圖的高度Height和寬度(Width)。處理事件觸發時,動態地改變圖的兩個屬性就可達到效果。
<script> functionshow() {var w,h; var k; var con; w=smallslot.width; h=smallslot.height; k=w/h; if(k>=1){ if (w>=200){ w=200; h=w/k; }} else {if(h>=150){ h=150; w=k?h; } } return w; } </script> <imgborder=0 ID="smallslot" src="4.jpg" onload="javascript:width=x;"align="left"> <script languge="javascript"> varx=show(); </script>
在這段程式碼中,將處理後的影像的width作為show()函數的回傳值。在中用onload事件呼叫映像的Width。
問題:首頁的圖片新聞圖片沒有顯示,點選網址列中的「轉到」按鈕,才能正常顯示。實踐告訴我又一次失敗!因為上網者惟一習慣做的是輸入網址、鍵入回車這兩個動作。在此基礎上,筆者做了以下嘗試: (1)
和 之間加入“方案三:將中的Onload()事件放到
仔細分析方案二,筆者發現主要原因是onload事件是頁面載入時觸發的事件。 Onload在元素中使用,當IE解釋到此處,需裝載頁面才能觸發“javascript:width=x;”,因此要重新裝載頁面才能顯示圖片。另外,Onload()一般用在
元素中,預先完成裝載頁面時觸發的事件。所以,我把中的Onload()事件放到了中去,程式碼如下:<body onload="window.smallslot.width=show();"> <script> function show() {….. //show() } </script> <img border=0 ID="smallslot"src="1.jpg" align="left"> this is atest!
再次测试,通过了,而且首页调用成功!我成功了! 经过这次经历,让笔者感受到了从事程序开发工作的艰辛和乐趣!有时为了一个小小的问题折腾得茶饭不思,但成功的喜悦又让人溢于言表。任何事情只要自己能刻苦钻研、持之以恒,相信问题总会得到解决的。
以上是JavaScript使用三種方式實作修改圖像大小詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!