2015-02-05 33 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

相关问题