我正在尝试编写一个 jQuery 可调整大小的幻灯片。通过调整大小,我的意思是只要调整屏幕大小,幻灯片元素就会调整大小。
我有幻灯片的核心工作。但是,我想在调整浏览器屏幕大小时加速当前的幻灯片动画,然后加快当前动画时设置的最后一个 setTimeout (将拟合元素调用到当前窗口大小并为它们设置动画)开始了。
现在,当屏幕重新调整大小时,当前幻灯片的动画会以之前的窗口比例大小继续。当这张幻灯片的动画完成后,下一个动画就会加载适当的大小。
您可以在此处查看幻灯片示例(重新调整窗口大小以更好地了解我要传达的内容):http ://websonalized.com/myplugin/myplugin.php
这是我调用函数以适应幻灯片元素、动画和函数本身的函数,以实现永无止境的循环:
function recycle(){
//this here is the slides array (i.e. $slides)
var this_duration = $(this[0]).data('duration') - 300;
//prepare sizes and positions for all slide elements (i.e. background, and elements)
processslide(this[0], slider_config, slides_original_fonts[0]);
push.apply($slides, splice.call($slides, 0, 1));
push.apply(slides_original_fonts, splice.call(slides_original_fonts, 0, 1));
var next_slide = setTimeout(function(){ recycle.call($slides); }, this_duration);
next_slide;
};
上面调用的函数:
function processslide(slide, slider_config, slide_original_fonts){
fitslide(slide, slider_config, slide_original_fonts);
animateslide.call(slide, slider_config, slide_original_fonts);
};
动画幻灯片的功能是:
function animateslide(slide_config, slide_original_fonts){
var current_width = $('#' + slider_config.id).parent().width();
var percent_difference = current_width/slider_config.slider_width;
var current_height = slider_config.slider_height * percent_difference;
var z_counter = 2;
var slide = $(this);
var background = $($(this).children('.slidebg'));
var slide_default = {
easing : 'swing',
duration: 500,
squares : 125,
transition : 'fade',
speedIn: 1000,
speedOut: 300,
yInit: parseInt(background.css('top').replace('px', '')),
xInit: parseInt(background.css('left').replace('px', ''))
};
var _config = $.extend({}, $(this).data(), background.data());
$.each(slide_default, function(k, m){ if(_config[k] == ''){ _config[k] = m; } });
_config = $.extend({}, slide_config, slide_default, _config);
var elements = $(this).find('.slide_elements').children();
var elements_default = {
easing: 'swing',
speed: 500,
start: 500,
travel: 'fade',
y: 0,
x: 0
};
var elements_cummulative_time = _config.speedIn;
background.css('z-index', z_counter);
z_counter++;
background.animate({
opacity: 1,
top: _config.yTravel,
left: _config.xTravel
}, _config.speedIn, _config.easing, function(){
var background = $(this);
$(elements).each(function(i){
var element = $(this);
element.css('z-index', z_counter);
z_counter++;
var element_configuration = element.data();
$.each(elements_default, function(l, o){ if(element_configuration[l] == '') element_configuration[l] = o; });
element_configuration = $.extend({}, elements_default, element_configuration);
elements_cummulative_time = elements_cummulative_time + element_configuration.start;
setTimeout(function(){
element.animate({
opacity: 1,
top: percent_difference*element_configuration.y,
left: percent_difference*element_configuration.x
}, element_configuration.speed, element_configuration.easing);
}, element_configuration.start);
});
});
setTimeout(function(){
elements.animate({
top: _config.yInit,
left: _config.xInit
}, _config.speedOut, _config.easing, function(){
elements.each(function(){ $(this).css('z-index', 0)}); });
//we remove the slide elements before we remove the background
}, parseInt((_config.duration - 200) - _config.speedOut));
setTimeout(function(){
background.animate({
top: _config.yInit,
left: _config.xInit
}, _config.speedOut, _config.easing, function(){
var currentTime= new Date();
background.css('z-index', 0);
fitslide(slide, slide_config, percent_difference, slide_original_fonts);
});
}, parseInt(_config.duration - _config.speedOut));
$(window).resize( function(){
console.log('STOPPING ELEMENTS');
elements.stop(true);
background.stop(true,true);
});
};
ANDDDDDDDDDDDD窗口调整大小函数:
function debouncer( recycle, timeout) {
var timeoutID , timeout = timeout || 100;
return function () {
var scope = this , args = $slides;
timeoutID = setTimeout( function () {
recycle.apply( scope , Array.prototype.slice.call( args ) ); } , timeout );
}
};
$(window).resize( debouncer( function ( e ) {
// do stuff
}));
同样,我希望将当前的幻灯片动画加速到最后,或者触发在当前幻灯片动画后立即设置的 setTimeout(回收函数),或者以不同的方式调用回收函数以实现相同的结束,两者当浏览器的屏幕重新调整大小时。
呜呜呜……谢谢