使用 jquery 动态更改和动画背景图像
Change and animate background image dynamacally using jquery
我有以下代码。
(function ($) {
var i = 0;
var header_banner = $(".destination-banner");
var banners = ["bg1.png","bg2.png","bg3.png"];//<?php //echo $slide_banners; ?>;
header_banner.css('backgroundImage', 'url(<?php echo site_url(); ?>contents/images/home-slider/'+banners[0]+')');
window.setInterval(function () {
i = i == banners.length ? 0 : i;
header_banner.animate({backgroundImage: 'url(<?php echo site_url(); ?>contents/images/home-slider/'+banners[i]+')'}, 3000);
i++;
}, 30);
})(jQuery);
我试图使用 animate()
方法为 div.destination-banner
的背景图像制作动画。我可以使用相同的方法更改背景颜色。但是背景图片。需要使用 ajax
吗?
谢谢。
已编辑:
请找到我的 jsfiddle here。
无需使用 ajax 即可完成您的需要。这样做的原因是 ajax 实际上就是调用服务器获取数据然后重新加载这些数据,而无需重新加载页面。
如果你真的想为此使用 jQuery 动画,涉及的步骤是:
1) 将背景图像设置为不透明度:0 2) 然后将背景图像设置为新图像,然后 3) 将其设置为动画,如下面的代码所示:
$(document).ready(function() {
(function ($) {
var i = 0;
var header_banner = $(".destination-banner");
var banners = ["https://c1.staticflickr.com/9/8882/18535493118_ecdcc47918_b.jpg","http://www.fs.fed.us/wildflowers/ethnobotany/images/oils/mountain_monardella_lg.jpg"];
header_banner.css('backgroundImage', 'url("'+banners[0]+'")');
window.setInterval(function () {
i = (i >= banners.length) ? 0 : i;
//animate it to fade, then do a callback, after animation is done
header_banner.animate({opacity: 0}, function(){
//change the background image
header_banner.css('backgroundImage','url("'+banners[i]+'")');
//fade back in
header_banner.animate({opacity: 1}, 3000);
i++;
});
}, 30);
})(jQuery);
});
您的代码首先无法运行的原因是 1) 您试图为 backgroundImage 设置动画,但您做不到。你的 i = (i == banners.length) ? 0 : i;
做到了,所以它会继续增加并且 banners.length
比数组位置大 1(一旦你超过 banners.length
,你最终会继续变得未定义),然后你没有在 "url("+banners[i]+")";
部分中加上引号,导致 url 值不正确,你需要进行插值。
我有以下代码。
(function ($) {
var i = 0;
var header_banner = $(".destination-banner");
var banners = ["bg1.png","bg2.png","bg3.png"];//<?php //echo $slide_banners; ?>;
header_banner.css('backgroundImage', 'url(<?php echo site_url(); ?>contents/images/home-slider/'+banners[0]+')');
window.setInterval(function () {
i = i == banners.length ? 0 : i;
header_banner.animate({backgroundImage: 'url(<?php echo site_url(); ?>contents/images/home-slider/'+banners[i]+')'}, 3000);
i++;
}, 30);
})(jQuery);
我试图使用 animate()
方法为 div.destination-banner
的背景图像制作动画。我可以使用相同的方法更改背景颜色。但是背景图片。需要使用 ajax
吗?
谢谢。
已编辑:
请找到我的 jsfiddle here。
无需使用 ajax 即可完成您的需要。这样做的原因是 ajax 实际上就是调用服务器获取数据然后重新加载这些数据,而无需重新加载页面。
如果你真的想为此使用 jQuery 动画,涉及的步骤是: 1) 将背景图像设置为不透明度:0 2) 然后将背景图像设置为新图像,然后 3) 将其设置为动画,如下面的代码所示:
$(document).ready(function() {
(function ($) {
var i = 0;
var header_banner = $(".destination-banner");
var banners = ["https://c1.staticflickr.com/9/8882/18535493118_ecdcc47918_b.jpg","http://www.fs.fed.us/wildflowers/ethnobotany/images/oils/mountain_monardella_lg.jpg"];
header_banner.css('backgroundImage', 'url("'+banners[0]+'")');
window.setInterval(function () {
i = (i >= banners.length) ? 0 : i;
//animate it to fade, then do a callback, after animation is done
header_banner.animate({opacity: 0}, function(){
//change the background image
header_banner.css('backgroundImage','url("'+banners[i]+'")');
//fade back in
header_banner.animate({opacity: 1}, 3000);
i++;
});
}, 30);
})(jQuery);
});
您的代码首先无法运行的原因是 1) 您试图为 backgroundImage 设置动画,但您做不到。你的 i = (i == banners.length) ? 0 : i;
做到了,所以它会继续增加并且 banners.length
比数组位置大 1(一旦你超过 banners.length
,你最终会继续变得未定义),然后你没有在 "url("+banners[i]+")";
部分中加上引号,导致 url 值不正确,你需要进行插值。