【问题标题】:Change image source based on viewport width根据视口宽度更改图像源
【发布时间】:2012-09-28 20:41:13
【问题描述】:
<script type="text/javascript">
  $(window).resize(function(){
  var width = $(window).width(); 

   if (width < 361) {
      $(".infograph-image").attr("src","/images/infographicHowMobile.png");
   }
 }); 
</script>

我希望根据视口宽度大小更改给定图像的图像源。 如果视口宽度大小为 360 或更小,请更改为图像的移动版本。

我有两个简单的问题:

1) 我们如何做到这两点:a) 检测窗口调整大小并准备好文档?

这个,我相信我得到了:

我需要把它变成一个函数。 然后在加载时调用它;

checkResponsive();

然后绑定一个事件监听器:

   

$(window).resize(checkResponsive);

2) 我们有几张图片需要手机版,应该转换成功能吗?或者几个 if 可能会起作用?

能否请您先介绍一下这两个问题。

【问题讨论】:

  • 你尝试过 $(window).resize() 还是 css 媒体查询?
  • @prashanth: window.resize 是我在发布的代码示例中所拥有的。媒体查询,有没有办法使用媒体查询更改 img src?
  • 我会说使用媒体查询。另外,如果您愿意,您也可以这样做:jquerypicture.com 这是一个很棒的插件,只需调整窗口大小,您就会理解它。希望对您有所帮助\
  • @prashanth 非常感谢您的回答。但是,这行不通。我完全知道使用 css 更改背景图像,但这里不是这种情况。

标签: jquery


【解决方案1】:

创建一个单独的函数并在两个事件上调用它们。 因此,例如,像这样创建函数 mobileImg():

function mobileImg(targetClass, imageSrc) {
    var width = window.innerWidth; // No need for jQuery here, raw JS can do this

    if(width < 361) {
        $(targetClass).attr("src", imageSrc);
    }
}

然后在这两个事件上调用它。

$(document).ready(mobileImg(".infograph-image", "/images/infographicHowMobile.png"));
$(window).resize(mobileImg(".infograph-image", "/images/infographicHowMobile.png"));

然后,您可以根据需要使用任何参数调用mobileImg 方法。 如果你真的想让它干净,还要检查传递的元素和图像是否存在,并在需要的地方使用后备。

【讨论】:

  • 我没听懂。如果我有 infographicHowMobile 和 infographicAboutMobile 和 infographicOtherImageMobile 和 infographicYetAnotherImageMobile,我需要调用 8 次 document.ready 和 window.resize 吗? :s
  • @MEM 不,您可以将它们堆叠在 1 次调用中。喜欢:$(document).ready(mobileImg(".class1", "img1"); mobileImg(".class2", "img2")); 等等...或者将 targetClass/imageSrc 作为数组传递给函数并遍历所有这些。
  • @Oldskook - 非常感谢,我最终使用了以下非常好的脚本,它以我希望的方式完成工作:responsejs.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多