js獲取圖片寬高的方法:1、onload後在打印;2、通過complete與onload一起混合使用;3、通過定時循環檢測獲取,代碼為【from:check : width:' img .width ',height:' img.heig】。
本教學操作環境:windows7系統、javascript1.8.5版,DELL G3電腦。
js取得圖片寬高的方法:
一、簡陋的取得圖片方式
// 图片地址 后面加时间戳是为了避免缓存 var img_url = ‘upload/2013/13643608813441.jpg?'+Date.parse(new Date()); // 创建对象 var img = new Image(); // 改变图片的src img.src = img_url; // 打印 alert('width:'+img.width+',height:'+img.height);
結果如下:
寬高都是0的這個結果很正常,因為圖片的相關資料都沒有被載入前它的寬高預設就是0 於是可以這麼優化!
二、onload後在印
// 图片地址 后面加时间戳是为了避免缓存 var img_url = 'upload/2013/13643608813441.jpg?'+Date.parse(new Date()); // 创建对象 var img = new Image(); // 改变图片的src img.src = img_url; // 加载完成执行 img.onload = function(){ // 打印 alert('width:'+img.width+',height:'+img.height); };
結果如下
透過onload就能取得圖片的寬高了。但onload大一點的圖通常都比較慢,不實用,但只要圖片被瀏覽器緩存,那麼圖片加載幾乎就不用等待即可觸發onload,我們要的是佔位符。所以有些人透過快取獲取也可以這麼寫。
三、透過complete與onload一起混合使用
為了測試快取效果,注意以下測試圖片的url都不加時間戳
// 图片地址 var img_url = 'upload/2013/13643608813441.jpg'; // 创建对象 var img = new Image(); // 改变图片的src img.src = img_url; // 判断是否有缓存 if(img.complete){ // 打印 alert('from:complete : width:'+img.width+',height:'+img.height); }else{ // 加载完成执行 img.onload = function(){ // 打印 alert('from:onload : width:'+img.width+',height:'+img.height); }; }
第一次執行,永遠是onload觸發
你再刷新,幾乎都是快取觸發了
從快取裡讀取圖片的寬高不用說,非常方便快捷,今天我們要解決的是沒有快取而又快速的相比onload更快的方式去獲取圖片的寬高。我們常常知道有些圖片雖然沒有完全down下來,但是已經先有佔位符,然後一點一點的加載。既然有佔位符那應該是請求圖片資源伺服器回應後回傳的。可伺服器什麼時候會回應並傳回寬高的資料沒有觸發事件,例如onload事件。於是催生了第四種方法
四、透過定時循環檢測取得
#看看以下例子,為了避免從快取讀取數據,每一次請求都帶時間戳記:
// 图片地址 var img_url = 'upload/2013/13643608813441.jpg?'+Date.parse(new Date()); // 创建对象 var img = new Image(); // 改变图片的src img.src = img_url; // 定时执行获取宽高 var check = function(){ document.body.innerHTML += ' from:check : width:'+img.width+',height:'+img.height+' '; }; var set = setInterval(check,40); // 加载完成获取宽高 img.onload = function(){ document.body.innerHTML += ' from:onload : width:'+img.width+',height:'+img.height+' '; // 取消定时获取宽高 clearInterval(set); };
推薦學習:《JavaScript影片教學》
以上是js如何取得圖片寬高的詳細內容。更多資訊請關注PHP中文網其他相關文章!