Сделайте слайдер Nivo fade-in на нагрузке
Эй, я хочу загрузить слайдер Nivo в следующем порядке:
- перед слайдов, погрузка.отображается gif.
- как только слайды готовы появиться, они исчезают.
функция вызова слайдера Nivo выглядит следующим образом:
$(window).load(function() { /* ///// start WINDOW load ///// */
$('#slider').nivoSlider({
effect:'random', //Specify sets like: 'fold,fade,sliceDown'
slices:12,
animSpeed:500, //Slide transition speed
pauseTime:3000,
startSlide:0, //Set starting Slide (0 index)
directionNav:false, //Next & Prev
directionNavHide:true, //Only show on hover
controlNav:false, //1,2,3...
controlNavThumbs:false, //Use thumbnails for Control Nav
controlNavThumbsFromRel:false, //Use image rel for thumbs
controlNavThumbsSearch: '.jpg', //Replace this with...
controlNavThumbsReplace: '_thumb.jpg', //...this in thumb Image src
keyboardNav:true, //Use left & right arrows
pauseOnHover:true, //Stop animation while hovering
manualAdvance:false, //Force manual transitions
captionOpacity:0.8, //Universal caption opacity
beforeChange: function(){},
afterChange: function(){},
slideshowEnd: function(){}, //Triggers after all slides have been shown
lastSlide: function(){}, //Triggers when last slide is shown
afterLoad: function(){} //Triggers when slider has loaded
});
});
загрузка.gif отображается с помощью этого оператора CSS, который находится в ползунке nivo.css файл:
#slider {
background: #eee url(../images/nivo-loader.gif) no-repeat 50% 50%;
position: relative;
width: 960px; height: 328px;
}
#slider img {
position: absolute;
top: 0px;
left: 0px;
display: none;
}
Я думал, что способ сделать это-использовать встроенный параметр afterLoad, например:afterLoad(function() { $(this).fadeIn(); });
но это не сработало.
поэтому я был бы очень признателен за любые идеи! Спасибо!
обновление:
HTML очень прост (как и большинство макетов слайдера Nivo):
<div id="slider" class="box"> <!-- Image/video top box (cinema) -->
<img src="assets/images/cinema/slide1.jpg" />
<img src="assets/images/cinema/slide2.jpg" />
<img src="assets/images/cinema/slide3.jpg" />
<img src="assets/images/cinema/slide4.jpg" />
</div>
когда я использую параметр afterLoad, ничего не происходит; загрузка.gif появляется, но затем изображения появляются резко (без fadeIn () я бы хотел). В принципе, все работает, но я бы хотел, чтобы эти изображения исчезни, как только шоу будет готово к началу. Затем они должны просто скользить со своими случайными переходами (как они делают сейчас).
2 ответов
что я бы сделал, это наложить слайдер с загрузчиком и использовать nivo afterLoad
функция, чтобы сделать анимацию, которую вы хотите на содержащихся изображений, а не slider
держатель. Вот как я это сделаю:
<div id="wrapper">
<div id="slider" class="box">
<img src="assets/images/cinema/slide1.jpg" />
<img src="assets/images/cinema/slide2.jpg" />
<img src="assets/images/cinema/slide3.jpg" />
<img src="assets/images/cinema/slide4.jpg" />
</div>
<div id="preloader">
<img src="assets/images/nivo-loader.gif" />
</div>
</div>
теперь с помощью CSS вы наложите предварительный загрузчик на ползунок, используя абсолютное положение по отношению к относительному положению wrapper
:
#wrapper { position:relative; }
#preloader {
background:#eee;
position:absolute; top:0; left:0; z-index:51; /* z-index greater than #slider */
width:960px; height:328px;
}
#preloader img {
padding:150px 0 0 470px; /* unknown img size, but adjust so centered */
}
#slider {
background: #eee url(../images/nivo-loader.gif) no-repeat 50% 50%;
position: relative; z-index:50; /* set z-index as appropriate to your site */
width: 960px; height: 328px;
}
#slider img {
position: absolute;
top: 0px;
left: 0px;
display: none;
}
затем ползунок nivo будет иметь все соответствующие вызовы, затем afterLoad
будет содержать вашу анимацию затухания на изображениях внутри слайдера:
$('#slider').nivoSlider({
...lots of properties then...
afterLoad: function(){
var $slider = $('#slider img');
$slider.css('opacity',0);
$('#preloader').fadeOut(500, function(){
$slider.animate({'opacity':1}, 500);
});
}
});
если вы хотите крест-исчезают вместо этого, то ваш afterLoad
может выглядеть просто как:
$('#slider').nivoSlider({
...lots of properties then...
afterLoad: function(){
$('#preloader').fadeOut(500);
}
});
это позволит избежать любых проблем, которые у вас были с изображениями появляются.
Я использую следующее Для реализованного решения wordpress:
под слайдером добавьте загрузочный gif
<div id="slider_container">
<div id="slider">
<?php
$captions = array();
$tmp = $wp_query;
$wp_query = new WP_Query('post_type=featured&orderby=menu_order&order=ASC');
if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post();
$rlink = get_post_meta($post->ID,'rlink',true);?>
<?php if($rlink !=''){?>
<a href="<?php echo $rlink;?>">
<?php }?>
<img class="slideimg" src="<?php echo get_template_directory_uri(); ?>/timthumb.php?src=<?php echo get_image_path(get_post_meta($post->ID, 'slideimage_src', true)); ?>&h=450&w=900&zc=1" alt="<?php echo get_post_meta($post->ID, 'rmcaption', true); ?>" title="<?php echo get_post_meta($post->ID, 'rmcaption', true); ?>" />
<?php if($rlink !=''){?>
</a>
<?php }?>
<?php echo $image[0]; ?>
<?php
endwhile; wp_reset_query();
endif;
$wp_query = $tmp;
?>
</div> <!-- end slider -->
<?php // load the loading image first whilst nivo is pre-loading images ?>
<div class="loading"><img src="<?php bloginfo('url'); ?>/images/assets/ajax-loader.gif" /> </div>
</div>
<!-- end #slider_container -->
<!-- nivo slider & slider settings -->
<script type="text/javascript">
$j = jQuery.noConflict();
$j(window).load(function() {
$j('#slider').nivoSlider({
// all your settings
а затем в вашем заголовке.php, прежде чем добавить это:
<script type="text/javascript">
$j = jQuery.noConflict();
$j(document).ready(function() {
$j('#slider.nivoSlider').hide();
$j('.loading').show();
// then when the #content div has loaded
$j(window).bind('load', function() {
$j('#slider.nivoSlider').show();
$j('.loading').hide();
$j('#slider.nivoSlider').fadeIn('slow');
});
});
</script>