2015-02-05 64 views
0

我放棄了找到一個交叉瀏覽器圖像解決方案,這讓我很開心。 我現在想讓它成爲帶走成本的「移動第一」方式。onload後在頁面上修改所有沒有標識的圖像(src)

計劃:向所有客戶發送手機尺寸的圖像。 然後我能夠得到瀏覽器的視口大小工作正常。 我的CSS切換如下:< = 1000 px手機視圖> = 1001桌面視圖。

但是:然後:我想我會將圖像保存在具有不同文件擴展名的相同路徑中。可以說,我將它們保存爲如下

/img/myimage-mobile.jpg 
/img/myimage-normal.jpg 
/img/myimage-highres.jpg 

初始加載看起來像

<img src="img/myimage-mobile.jpg" alt="#" /> 

現在我的問題:我怎樣才能得到所有的img標籤和更改src屬性的延伸?當檢測到視口寬度> = 1001時,我想用「-image.jpg」替換所有「-mobile.jpg」,用「myimage-highres.jpg」替換所有〜1400。

多數民衆贊成我走到這一步:

var w = Math.max(document.documentElement.clientWidth,  window.innerWidth || 0) 
var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) 

獲得視口大小,然後我發現這個這是越來越整個src屬性:

var images = document.getElementsByTagName('img'); 
var srcList = []; 
for(var i = 0; i < images.length; i++) 
{ 
srcList.push(images[i].src); 
srcList.push(images[i].src); 
} 
+1

你能編輯你的問題,並顯示你的嘗試嗎? – NewToJS 2015-02-05 14:01:18

+2

您正在處理的網頁與問題無關,而且由於本網站的許多用戶通過其工作計算機訪問了此網頁,因此絕對不必要:在任何工作場所的網絡上,護送網站都不太可能受到歡迎。 – 2015-02-05 14:06:10

+0

你是對的;)。這是我正在研究的一個非常嚴肅的網站,但你說得對,資源無關緊要。 Sry;)。 – 2015-02-05 14:23:58

回答

0

我不認爲這是最好的方法,但它確實改變了圖像路徑,但這也將在窗口大小調整。如果其他開發者想編輯這個來清理它或者改進某些東西,那麼可以隨意這樣做。

檢測用戶設備而不是使用瀏覽器高度/寬度會更好嗎?

var defaultimg="normal"; 
function _Imgs(){ 
var imgsize; 
var Pw=document.documentElement.clientWidth; 
var Ph=document.documentElement.clientHeight; 
if(Pw<800||Ph<300){ // Change this to Set width for mobiles 
imgsize="mobile"; 
}else{ 
imgsize="normal"; 
} 
    var MyImgs=document.getElementsByTagName("IMG"); 
    for(var i=0; i<MyImgs.length; i++) { 
     MyImgs[i].setAttribute("src",MyImgs[i].src.replace(defaultimg, imgsize)); 
    } 
//Change variable value to allow toggle on window resize 
    defaultimg=imgsize; 
} 
window.onload=_Imgs; 
window.onresize=_Imgs; 
+0

那麼,我的網站主要是基於百分比寬度,如果它低於1000px我們改變爲移動CSS。所以我們將所有1000px以下的圖片作爲手機處理。 UserAgents不可靠,所以這是我經過長時間的討論後的方式。我會試試這個,謝謝。 – 2015-02-05 16:33:04

+0

如果這回答您的問題,請將其標記爲讓其他人知道您的問題已得到解答。謝謝。 – NewToJS 2015-02-05 16:47:00

+0

嘿,它沒有完全工作。它適用於調整大小。但最初它保持與移動圖像。另外我需要在每個ajax請求之後調用它,因爲網站是由ajax加載的。 – 2015-02-05 17:02:47

0

使用jQuery你可以做這樣的

$('img').each(function(){ 
    var fix = $(this).attr('src').replace('mobile', 'normal'); 
    $(this).attr('src', fix); 
}) 

要檢測的視口大小,你可以這樣做:

var height = window.innerHeight; 
var width = window.innerWidth; 

然後,只需做一個函數進行包裝,一起:

window.onload = function(){ 
    var height = window.innerHeight; 
    var width = window.innerWidth; 
    if(height < 1000 && width < 400){ 
     $('img').each(function(){ 
      var fix = $(this).attr('src').replace('mobile', 'normal'); 
      $(this).attr('src', fix); 
     }) 

    } 
} 

或純JavaScript:

window.onload = function(){ 
    var height = window.innerHeight; 
    var width = window.innerWidth; 
    if(height < 1000 && width < 400){ 
     var imgs = document.getElementsByTagName('img'); 
     for(i=0;i<imgs.length;i++){ 
      var fix = imgs[i].src.replace('mobile', 'normal'); 
      imgs.src = fix; 
     } 
    } 
} 
+0

我相信這會工作,雖然這個問題沒有標記爲jQuery – taesu 2015-02-05 14:08:19

+0

我會添加一個純js方法 – jonode 2015-02-05 14:11:53

+0

感謝分享,但我沒有使用任何第三方庫,我不想爲一個jquery帶來重量功能;)。 – 2015-02-05 14:19:08

相關問題