【问题标题】:Replacing images with jQuery用 jQuery 替换图像
【发布时间】:2016-07-22 14:12:43
【问题描述】:

我有一个适用于台式机、平板电脑和移动设备的网站。使用桌面,我网站上的图像很大。使用平板电脑,这些相同的图像会被调整大小。再次使用移动设备,这些相同的图像会再次调整大小。我正在使用加载到移动桌面上的相同图像。这对于移动设备来说性能很差。我想要的是替换这些图像,并改为显示这些图像的缩略图。

注意:图像是使用 PHP for 循环从我的数据库中检索的。

我能做什么:

jQuery:

$(document).ready(function() {
    // run test on initial page load
    checkSize();

    // run test on resize of the window
    $(window).resize(checkSize);
});

//Function to the css rule
function checkSize(){
    if ($(".sampleClass").css("float") == "none" ){
        // replaces images code here
    }
}

CSS:

.sampleClass {float:left;}
@media only screen and (max-width: 800px){
    .sampleClass {float:none;}
}

我假设这段代码会发生什么,是先加载大图像,然后再加载缩略图。因此,创造了更糟糕的体验。我怎样才能使图像在移动设备上自动替换为缩略图,而无需加载大型桌面图像?

【问题讨论】:

  • 图片在哪里使用?
  • @MoisheLipsker 我有一个 PHP 循环,它将显示数据库中的图像。所以为了简单起见,假设它是这样的:{<img src='$image'>}
  • 试试新的html5图片元素。或者动态添加图片,而不是替换它们
  • 您可以使用css 来代替设置src 内联。
  • @MoisheLipsker 图片链接位于我的数据库中

标签: javascript jquery html css


【解决方案1】:

HTML

<div class="bgDiv" data-desktop-image="desktop.png" data-tablet-image="Tablet.png" data-mobile-image="Mobile.png"></div>

脚本

function checkSize() {
  var windowWidth = $(window).width();
  $Element = $('.bgDiv');
  if (windowWidth > 1024) {
    currentImage = $Element.attr('data-desktop-image');
  } else if (windowWidth > 767 && windowWidth < 1025) {
    currentImage = $Element.attr('data-tablet-image');
  } else {
    currentImage = $Element.attr('data-mobile-image');
  }
  $Element.css('background-image', 'url(' + currentImage + ')');
}

【讨论】:

  • 如果我在移动设备上加载桌面图像和移动图像一样吗?
  • @nope。它将在桌面上加载移动图像
  • @user2896120 请查看我更新的答案。现在它将根据屏幕分辨率加载。
  • @Jonasw 有没有办法不在桌面上加载移动图像?
【解决方案2】:

这样的?

<img src="loader.gif" data-large-src="large-img-1.jpg" data-mobile-src="mobile-img-1.jpg"/>
<img src="loader.gif" data-large-src="large-img-2.jpg" data-mobile-src="mobile-img-2.jpg"/>

function checkSize(){
    if ($(".sampleClass").css("float") == "none" ){
        // init all the images with small versions of images
        $('img').each(function() {
          $(this).attr('src', $(this).attr('data-mobile-src'));  
        });
    }
    else {
      // init all the images with large versions of images
      $('img').each(function() {
        $(this).attr('src', $(this).attr('data-large-src'));
      });
    }
}

【讨论】:

  • 这看起来很有说服力,data-mobile-src 是否适用于大多数浏览器?另外,如果我使用移动设备,是否会加载 large-img-1.jpg 和 large-img-2.jpg?
  • 问题:当网站(包括一些大图片)加载完毕后,脚本启动。
  • 要解决@Jonasw 提出的问题,您可以最初将src 保留为空,并将large-img-1.jpglarge-img-2.jpg 设置为data-large-src 属性的值。添加一个else,将图像的src 设置为$(this).attr('data-large-src')
  • @MoisheLipsker 如果我要创建三个图像元素会怎样。一种适用于台式机、平板电脑和移动设备。如果我使用媒体查询根据浏览器的大小使用 display none 来隐藏图像元素,那会起作用吗?如果我在移动设备上,桌面图像还会加载吗?
猜你喜欢
  • 2014-10-09
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2011-04-28
  • 1970-01-01
  • 2018-03-27
  • 2011-07-11
相关资源
最近更新 更多