2016年1月17日 星期日

fix image width:auto

這問題似乎只有在chrome上會碰到~
在 IE 宣告陣亡之後,問題兒童的寶座快要交給chrome了= =|||...

測了很久,目前的結論就是,chrome的 width:auto,得到的 圖片 長寬不太正常....
正常在 firefox 上 width:auto 會得到 原圖片的大小,但在chrome上有時會有時不會=_=a...
(規則大概就是,開新chrome,開page的那第一次,圖片大小會有問題(有誤差),但是如果縮放視窗、全螢幕、F12,之後看就又對了= =a)

總之,一個一勞永逸的方式就是~自己取得原圖片的原始大小Orz..
此外,自己取圖片的大小並設定還有一個好處就是~
順便解 chrome 在  jquery.load(xxx.html) image進來時,那些  image 的長寬都是0 的問題...
然後搞笑的是...在我的情況下,firefox ctrl+F5時,圖片自動會變 24px??!!!....

一般網路上給的資源大多是只取一個圖片的原始大小,
但在我的case裡,是要全部的圖片都一起 縮放~
就改寫了一下~

重點就是... new Image 來暫存要讀的圖檔~
在 image onload 事件 時,可以拿到他原始的長寬...
然後為了要觸發事件, 所以在寫完 onload 事件後,再去把 image 的 src 指向位置過去。
http://stackoverflow.com/questions/12354865/image-onload-event-and-browser-cache
var img = new Image();
img.onload = function () {
   alert("image is loaded");
}
img.src = "img.jpg";
---------------------------------------------------------------

var myimgs = $('.myimg');
var tmpImg = [];
for(var i = 0 ; i < myimgs.length ; i++)  {
....  
tmpImg[i] = new Image(); tmpImg[i].alt = i; tmpImg[i].isload = '0'; tmpImg[i].onload = function() { var height = this.height; var width = this.width; $(myimgs[ this.alt ]).css('width', width); $(myimgs[this.alt]).css('width', Math.floor(parseInt(width)*imgscale)+'px'); tmpImg[this.alt].isload = '1'; //check if all image load ok?? var flag = true; for(var i = 0 ; i < tmpImg.length ; i++) { if ( tmpImg[i].isload == '0') { flag = false; break; } } if (flag) { ...... } } tmpImg[i].src = $(myimgs[i]).attr('src');
....
$(myimgs[i]).css('height', 'auto');
}

沒有留言: