动画:jQuery vs CSS?
Animations: jQuery vs CSS?
我一直在构建一个自定义 jQuery "carousel"(滑块),它会连续迭代三个图像。到目前为止效果很好,但是我在尝试编写更改“#slideshow”的 'src' 属性同时触发 fadeIn 或 fadeOut 的代码时遇到了麻烦。
我的问题:我是否正确地解决了这个问题(使用 jQuery)或者我应该求助于切换 css 动画?
代码:
$(function() {
var slides = ['img/slide1.jpg', 'img/slide2.jpg', 'img/slide3.jpg'];
function changeSlide(arr) {
$('#slideshow').attr('src', arr[0]);
var i = 1;
setInterval(function() {
$('#slideshow').attr('src', arr[i]);
i++;
if (i >= arr.length) {
i = 0;
}
}, 3500);
}
changeSlide(slides);
});
为了澄清,我的 HTML 轮播看起来像这样:
<div id="carousel">
<img id="slideshow" src="img/slide1.jpg">
</div>
在我看来,jQuery 比 CSS 好得多。你会很好。每个代码都有一些或其他可以稍后修复的错误。你只需要保持观察。就这些!
I've had trouble trying to write code that changes the 'src' attribute of '#slideshow' while simultaneously triggering fadeIn or fadeOut.
如果这是您想要的方式,可以通过以下方式完成:
1) 预加载所有图片以避免src-change-triggered加载。
2) 将 position:relative
添加到您的 #carousel,然后在您的滑块内添加一个额外的 img
。
3) 将 position
更改为 absolute
两个 img
s
4) 隐藏一个'img'
在图像之间交替,所以:
1 - 您将隐藏的 src
更改为 "next" 图像
2 - 你同时淡出可见和淡入不可见
3 - 重复
尝试加载所有图像以避免连续请求图像,将 class
设置为 slideshow
代替 id
,利用 complete
回调函数 .fadeIn()
, .fadeOut()
在父元素中的第一张图片上,在回调中的下一张图片上
$(function() {
function changeSlide(el) {
$(el)
.fadeIn(1500, function() {
$(this).fadeOut(1500, function() {
changeSlide(this.nextElementSibling || this.parentElement.firstElementChild)
})
})
}
changeSlide($(".slideshow:first"));
});
.slideshow {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="carousel">
<img class="slideshow" src="http://lorempixel.com/50/50/nature" />
<img class="slideshow" src="http://lorempixel.com/50/50/sports" />
<img class="slideshow" src="http://lorempixel.com/50/50/cats" />
</div>
我一直在构建一个自定义 jQuery "carousel"(滑块),它会连续迭代三个图像。到目前为止效果很好,但是我在尝试编写更改“#slideshow”的 'src' 属性同时触发 fadeIn 或 fadeOut 的代码时遇到了麻烦。
我的问题:我是否正确地解决了这个问题(使用 jQuery)或者我应该求助于切换 css 动画?
代码:
$(function() {
var slides = ['img/slide1.jpg', 'img/slide2.jpg', 'img/slide3.jpg'];
function changeSlide(arr) {
$('#slideshow').attr('src', arr[0]);
var i = 1;
setInterval(function() {
$('#slideshow').attr('src', arr[i]);
i++;
if (i >= arr.length) {
i = 0;
}
}, 3500);
}
changeSlide(slides);
});
为了澄清,我的 HTML 轮播看起来像这样:
<div id="carousel">
<img id="slideshow" src="img/slide1.jpg">
</div>
jQuery 比 CSS 好得多。你会很好。每个代码都有一些或其他可以稍后修复的错误。你只需要保持观察。就这些!
I've had trouble trying to write code that changes the 'src' attribute of '#slideshow' while simultaneously triggering fadeIn or fadeOut.
如果这是您想要的方式,可以通过以下方式完成:
1) 预加载所有图片以避免src-change-triggered加载。
2) 将 position:relative
添加到您的 #carousel,然后在您的滑块内添加一个额外的 img
。
3) 将 position
更改为 absolute
两个 img
s
4) 隐藏一个'img'
在图像之间交替,所以:
1 - 您将隐藏的 src
更改为 "next" 图像
2 - 你同时淡出可见和淡入不可见
3 - 重复
尝试加载所有图像以避免连续请求图像,将 class
设置为 slideshow
代替 id
,利用 complete
回调函数 .fadeIn()
, .fadeOut()
在父元素中的第一张图片上,在回调中的下一张图片上
$(function() {
function changeSlide(el) {
$(el)
.fadeIn(1500, function() {
$(this).fadeOut(1500, function() {
changeSlide(this.nextElementSibling || this.parentElement.firstElementChild)
})
})
}
changeSlide($(".slideshow:first"));
});
.slideshow {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<div id="carousel">
<img class="slideshow" src="http://lorempixel.com/50/50/nature" />
<img class="slideshow" src="http://lorempixel.com/50/50/sports" />
<img class="slideshow" src="http://lorempixel.com/50/50/cats" />
</div>