使用Javascript缩放/缩放/调整多个图像的最佳方法?

使用Javascript缩放/缩放/调整多个图像的最佳方法?,javascript,jquery,performance,jquery-ui,browser,Javascript,Jquery,Performance,Jquery Ui,Browser,我在div中有一个图像列表和一个jqueryui滑块,当用户滑动该条时,图像应该被调整大小/缩放(无论您想叫它什么),我尝试选择所有图像并使用jquery更改css的宽度和高度。它可以工作,但速度很慢,不太流畅 我读到浏览器很难调整图像大小,但应该有一种方法来提高性能或使其流畅,至少对于正在加载的图像是如此 以下是我的html标记: <div class="file-list"> <div class="file-cell"> <div class="th

我在div中有一个图像列表和一个jqueryui滑块,当用户滑动该条时,图像应该被调整大小/缩放(无论您想叫它什么),我尝试选择所有图像并使用jquery更改css的宽度和高度。它可以工作,但速度很慢,不太流畅

我读到浏览器很难调整图像大小,但应该有一种方法来提高性能或使其流畅,至少对于正在加载的图像是如此

以下是我的html标记:

<div class="file-list">
 <div class="file-cell">
    <div class="thumb-wrapper">
      <img width="100" height="100" title="mytitle" alt="myalt" src="image1.jpg">
    </div>
  </div>
  <div class="file-cell">
    <div class="thumb-wrapper">
      <img width="100" height="100" title="mytitle" alt="myalt" src="image1.jpg">
    </div>
  </div>
</div>
以下是Javascript代码:

jQuery().ready(function(){
var images = jQuery('.thumb-wrapper img'); //caches the query when dom is ready

jQuery( "#slider" ).slider({
    step: 13,
    min: 70,
    max: 200,
    value: 100,
    slide: function(event, ui){
              //i think if i return while resizing increases performace, 
              //confirm this please
              if(resizing) 
                     return;
               resizing = true;
               var size = CELL_WIDTH * ui.value / 100;
               size = size + 'em';
               images.css({
                     'width': size,
                     'height': size
               });
               resizing = false;
             }
    });                
    }

注意:我应该删除图像的宽度和高度属性吗?它们之所以存在,是因为它们是由wordpress生成的。

您的滑块中有一个步长值,它特别使滑块不流动。滑块将仅以步长的增量触发值。如果希望看到更小的调整增量,则需要将
步骤
值变小

而且,没有大小之间的动画,因此从一个大小到下一个大小的更改充其量是不稳定的。如果希望从一个大小到下一个大小的更改更平滑,可以使用jQuery动画从一个大小到下一个大小设置动画。即使这个动画也不能保证平滑(这取决于主机的性能),但它更可能平滑

您可以在此处看到该动画实现的工作示例:

您使用的
调整大小
标志对您没有任何帮助。这段javascript是单线程的,不是异步的,因此在执行完这段javascript之前,您不会得到另一个幻灯片回调,因此调整大小标志实际上不会完成任何事情

动画代码如下所示:

jQuery(document).ready(function() {

    var images = jQuery('.thumb-wrapper img'); //caches the query when dom is ready
    var CELL_WIDTH = 5;
    var ASPECT = 1.5;

    jQuery( "#slider" ).slider({
        step: 5,
        min: 70,
        max: 200,
        value: 100,
        slide: function(event, ui) {
            var size = (CELL_WIDTH * ui.value / 100) + "em";
            images.stop(true).animate({width: size * ASPECT, height: size}, 250);
        }
    });

});​

如果图像的动画大小仍然不够平滑,则解决方法是仅为边界轮廓设置动画(使用更少的CPU设置动画),然后,当用户暂停移动滑块一小段时间后,将图像更改为边界轮廓的新大小。这项技术在功能较弱的计算机时代经常使用。

您的滑块中有一个步长值,它特别使滑块不流动。滑块将仅以步长的增量触发值。如果希望看到更小的调整增量,则需要将
步骤
值变小

而且,没有大小之间的动画,因此从一个大小到下一个大小的更改充其量是不稳定的。如果希望从一个大小到下一个大小的更改更平滑,可以使用jQuery动画从一个大小到下一个大小设置动画。即使这个动画也不能保证平滑(这取决于主机的性能),但它更可能平滑

您可以在此处看到该动画实现的工作示例:

您使用的
调整大小
标志对您没有任何帮助。这段javascript是单线程的,不是异步的,因此在执行完这段javascript之前,您不会得到另一个幻灯片回调,因此调整大小标志实际上不会完成任何事情

动画代码如下所示:

jQuery(document).ready(function() {

    var images = jQuery('.thumb-wrapper img'); //caches the query when dom is ready
    var CELL_WIDTH = 5;
    var ASPECT = 1.5;

    jQuery( "#slider" ).slider({
        step: 5,
        min: 70,
        max: 200,
        value: 100,
        slide: function(event, ui) {
            var size = (CELL_WIDTH * ui.value / 100) + "em";
            images.stop(true).animate({width: size * ASPECT, height: size}, 250);
        }
    });

});​

如果图像的动画大小仍然不够平滑,则解决方法是仅为边界轮廓设置动画(使用更少的CPU设置动画),然后,当用户暂停移动滑块一小段时间后,将图像更改为边界轮廓的新大小。这种技术在功能较弱的计算机时代经常使用。

谢谢!!成功了!在过去的几天里,我一直在努力解决这个问题。我对javascript有点陌生,所以我怀疑resize变量不起作用。谢谢!!成功了!在过去的几天里,我一直在努力解决这个问题。我对javascript有点陌生,所以我怀疑resize变量不起作用。