使用媒体查询动态图像内容

时间:2016-08-23 19:09:07

标签: javascript css twitter-bootstrap responsive-design media-queries

我见过几个使用媒体查询根据屏幕宽度动态显示不同图像的例子。

这是我在其他地方找到的一个例子: http://jsfiddle.net/Ruddy/byH2j/

以上示例中的图像路径在CSS

中进行了硬编码
@media screen and (min-width: 1080px) {
.site-header .site-branding {
    background-image: url("../images/logo_big.png") !important;
    background: blue;
  }
}
@media screen and (max-width: 1079px) {
    .site-header .site-branding {
    background-image: url("../images/logo_med.png") !important;
    background: green;
  }
}

你怎么能在搜索结果页面之类的地方执行此操作,在页面加载之前所需的图像不知道?

1 个答案:

答案 0 :(得分:0)

找到了一个很好的解决方案。我们可以使用jQuery的$(window).resize()函数,而不是使用媒体查询,并根据当前窗口大小更改src属性。

Codepen在这里: http://codepen.io/dustinpage/pen/ytwjb

$(window).load(function() {
    //Wait for images to load before displaying them.
    //This prevents image flashing.
  resizeImage();  
  $('.image-resize').show();
});

$(window).resize(function() {
  //Whenever the window is resized check to see if new image needed.
  //Using the code to call images in Seven7 this way is OPTIONAL.
  //Performance will be better if you don't use ".resize" event.
  resizeImage();
});

function resizeImage() {

$('.image-resize').each(function() {
    var element = $(this),
        src = $(this).attr('src'),
        regx = /wid=\d+(\.\d)*/g,
        currentWidth,
        newWidth,
        newSrc;

   if ($(window).width() > 1824) { 
     /* Large Displays ----------- */
     //Return large image if screen size is over 768px
     currentWidth = src.match(regx);
     newWidth = 'wid=2000';
     newSrc = src.replace(currentWidth, newWidth);
     //Begin temporary code for testing output
     textWidth = newWidth.replace('wid=', '');
     $(".dsply-screen-size").text($(window).width());
     $(".dsply-image-size").text(textWidth);
    //End temporary code for testing output
   }
  else if ($(window).width() <= 1824 && $(window).width() > 1366) { 
     /* Desktops ----------- */
     //Return large image if screen size is over 768px
     currentWidth = src.match(regx);
     newWidth = 'wid=1824';
     newSrc = src.replace(currentWidth, newWidth);
     //Begin temporary code for testing output
     textWidth = newWidth.replace('wid=', '');
     $(".dsply-screen-size").text($(window).width());
     $(".dsply-image-size").text(textWidth);
    //End temporary code for testing output
   }
   else if ($(window).width() <= 1366 && $(window).width() > 767) { 
     /* Desktops ----------- */
     //Return large image if screen size is over 768px
     currentWidth = src.match(regx);
     newWidth = 'wid=1024';
     newSrc = src.replace(currentWidth, newWidth);
     //Begin temporary code for testing output
     textWidth = newWidth.replace('wid=', '');
     $(".dsply-screen-size").text($(window).width());
     $(".dsply-image-size").text(textWidth);
    //End temporary code for testing output
   }
   else if ($(window).width() <= 767 && $(window).width() > 480) {
     /* Tablets (portrait) ----------- */
     //Return medium image if screen size is between 481-767px
     currentWidth = src.match(regx);
     newWidth = 'wid=767';
     newSrc = src.replace(currentWidth, newWidth);
     //Begin temporary code for testing output
     textWidth = newWidth.replace('wid=', '');
     $(".dsply-screen-size").text($(window).width());
     $(".dsply-image-size").text(textWidth);
    //End temporary code for testing output
   }
   else if ($(window).width() <= 480) {
     /* Smartphones ----------- */
     //Return small image if screen size is less than 480
     //Note: Default image state is small so this "else if" is technically not needed.
     currentWidth = src.match(regx);
     newWidth = 'wid=480';
     newSrc = src.replace(currentWidth, newWidth);
     //Begin temporary code for testing output
     textWidth = newWidth.replace('wid=', '');
     $(".dsply-screen-size").text($(window).width());
     $(".dsply-image-size").text(textWidth);
    //End temporary code for testing output
   }

   element.attr('src', newSrc);
});

};

感谢达斯汀佩奇的伟大笔。