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