скрыть, задержать, затем исчезнуть - PullRequest
1 голос
/ 29 августа 2011

хорошо, так что я не могу заставить его работать.ничего не происходит.

просмотреть код здесь , поскольку слишком много для копирования.ну ... это не много, но слишком много для этого.

Я уменьшил это для простоты.Есть 36 изображений, но я использовал только пример с 6 изображениями.

в двух словах, у меня есть квадратные изображения, которые мне нужны, чтобы начать постепенно исчезать после того, как предыдущий исчезает. Гоша, это должнобудь проще для меня ...

спасибо.

$(document).ready(function() {
    setTimeout( function(){$("#slide1").hide().fadeIn(1000);}, 500);
    setTimeout( function(){$("#slide2").hide().fadeIn(1000);}, 700);
    setTimeout( function(){$("#slide3").hide().fadeIn(1000);}, 900);
    setTimeout( function(){$("#slide4").hide().fadeIn(1000);}, 1100);
    setTimeout( function(){$("#slide5").hide().fadeIn(1000);}, 1300);
    setTimeout( function(){$("#slide6").hide().fadeIn(1000);}, 1500);
});

<div style="display:none;"><img src="firstdate.jpg" /></div>
<div style="width:1000px; background-color:#666;margin-left:auto; margin-right:auto">
<div id="sliceContainer">
    <div class="sliceSpecs" id="slice1"></div>
    <div class="sliceSpecs" id="slice2"></div>
    <div class="sliceSpecs" id="slice3"></div>
    <div class="sliceSpecs" id="slice4"></div>
    <div class="sliceSpecs" id="slice5"></div>
    <div class="sliceSpecs" id="slice6"></div>
</div>
</div>

body {background-color:black}
#sliceContainer {width: 930px; height:930px; display:block; margin-left:35px; margin-right:35px}
.sliceSpecs {background:url(http://www.frankidollandthebrokentoys.com/123testing/firstdate.jpg);width:145px; height:145px; display:block; float:left; margin:5px}

#slice1 {background-position:0px 0px;}
#slice6 {background-position:145px 0px;}
#slice5 {background-position:290px 0px;}
#slice4 {background-position:435px 0px;}
#slice3 {background-position:580px 0px;}
#slice2 {background-position:725px 0px;}

Ответы [ 8 ]

3 голосов
/ 29 августа 2011

Попробуйте сделать это в окне JS.Теги HTML-скрипта там недопустимы.Сначала спрячьте все .sliceSpecs, затем покажите их один за другим.Вы также пытались показать slide1 и т.д ... вместо slice1.

$(".sliceSpecs").hide();

setTimeout(function() {
    $("#slice1").fadeIn(1000);
}, 500);
setTimeout(function() {
    $("#slice2").fadeIn(1000);
}, 700);
setTimeout(function() {
    $("#slice3").fadeIn(1000);
}, 900);
setTimeout(function() {
    $("#slice4").fadeIn(1000);
}, 1100);
setTimeout(function() {
    $("#slice5").fadeIn(1000);
}, 1300);
setTimeout(function() {
    $("#slice6").fadeIn(1000);
}, 1500);    

Демо: http://jsfiddle.net/dRhHZ/4/

Вот более чистый способ ведения дел.Вам не нужно для создания элементов в javascript, так как при жестком кодировании он будет отображаться, даже если у пользователя отключены сценарии.

$(".sliceSpecs").hide().each(function(i) {
    var target = $(this);
    setTimeout(function() {
        target.fadeIn(1000);
    }, 200 * i);
});

каждая демонстрация: http://jsfiddle.net/dRhHZ/24/

2 голосов
/ 30 августа 2011

НАЖМИТЕ ЗДЕСЬ ДЛЯ ДЕМОНСТРАЦИИ

Прежде всего, спасибо за размещение этого вопроса, я многому научился =) Прежде чем ядля вас просто пара замечаний: 1. Как правило, использование стилей в css считается лучшей практикой 2. в JSFiddle вам не нужно импортировать <script> s, вы можете импортировать jquery из боковой панели 3. Всегда пытайтесь найтилогика для проблемы и кодируйте ее мудро и кратко

Как говорится, вот что я придумал =):

HTML:

<div id="container">
   <div id="sliceContainer"></div>
</div>

CSS:

body {background-color:black}

div#container{
    width:960px !important; height:960px;background:#2A2A2A;
    margin: 20px auto; padding:25px 0px 0px 20px;
}

#sliceContainer {height:900px;margin: 0 auto;}

.sliceSpecs { background:url(http://www.frankidollandthebrokentoys.com/123testing/firstdate.jpg);width:145px; height:145px;float:left; margin:5px;}

JavaScript:

$(document).ready(function() { for (i = 1; i <= 36; i++) {$("#sliceContainer").append($(document.createElement('div')).addClass("sliceSpecs").css('background-position', (((i - 1) % 6) * -145) + "px " + (parseInt((i - 1) / 6) * -145) + "px").fadeTo(0, 0).delay(((i-1)%6 + 1 + Math.floor((i-1)/6))*100).fadeTo(500, 1));}});

Result

2 голосов
/ 30 августа 2011

Ола Ола .... простите за опоздание.

ДЕМО-СКИДКА

WOWgallery diagonal squared pattern jQuery

1

Прежде всего: ваш HTML может выглядеть так:

<div style="display:none;"><img src="firstdate.jpg" /></div>
<div style="width:1000px; background-color:#666;margin-left:auto; margin-right:auto">
    <div id="sliceContainer">   
        <!-- FREE UP YOUR HTML, jQuery can do it for you! -->
    </div>
</div>

Благодаря небольшому трюку, который клонирует все ваши элементы для вас:

///////// CLONE AND PREPEND SLICES! ////////////// 

var sliceS = $('<div class="sliceSpecs" class="slice" />');
for (var i = 0; i < 36; i++) { // 36 is 6*6 slices
    sliceS.after(sliceS.clone()).prependTo('#sliceContainer');
}

2

Скрыть все ваши кусочки, постепенно уменьшая их до '0'

///////// HIDE ALL SLICES ////////////////////////

$('.sliceSpecs').fadeTo(0,0);

3.

Вам не нужен этот грязный CSS:

#slice1 {background-position:0px 0px;}
#slice6 {background-position:145px 0px;}
#slice5 {background-position:290px 0px;}
... and so on .....

... потому что jQuery может установить для вас css backgroundPosition:

//////// SET BACKGROUND POSITIONS ////////////////

$('.sliceSpecs').each(function(){       
   var sS = $(this);    
   sS.css({position:'relative'});
   var posX = (sS.position().top);
   var posY = (sS.position().left);
   sS.css({
       backgroundPosition : '-'+ posY +'px -'+ posX +'px'
   });   
});

4

И после того, как ваши backgroundPosition / s установлены, давайте сделаем некоторые извращения: я использовал здесь свой скрипт из галереи, над которой я работаю ('WOWgallery!').

Это создаст диагональный узор, назначив классы:

1  2  3  4  5  6
2  3  4  5  6  7
3  4  5  6  7  8
4  5  6  7  8  9
5  6  7  8  9  10
6  7  8  9  10 11  <-- you can get all class names visible by uncommenting a line in the code.

Если (Ex.) Вы следуете данному классу '6', вы можете увидеть сгенерированный диагональный узор !

var c1 = 0; // медленный счетчик var c2 = 0; // быстрый счетчик var slX = 6;

$('.sliceSpecs').each(function() {
    var sl = $(this);
    c2++;
    if (c2 === (slX + 1)){
        c2 = 1;
        c1++;
    }
    sl.addClass('sl' + (c2 + c1));
   // sl.html(c2 + c1);  // !!! uncomment to test maximal c pattern value
});

Маленький и милый, не правда ли?

* * 5. тысяча сорок-девять

Пора добавить анимацию по времени, верно?:

var c = 0;
function an() {   

    timeOut = setTimeout(function() {
       c++;
        if(c === 12){c=0;return;} // IF c === the maximum c patt. value+1
       $('.sl' + c).fadeTo(700, 1);
        an();
    }, 200);
}

an();  // Do the animation

P.S. Я могу прокомментировать код, чтобы помочь вам понять.

Надеюсь, вам понравилась эта демонстрация.
Удачного кодирования!

0 голосов
/ 29 августа 2011

Одним из решений для этого является предоставление функции обратного вызова .С помощью функции обратного вызова вы говорите: «Когда эта функция завершится, выполните этот код».Вы можете использовать это для постепенного исчезновения изображения, а затем предоставить обратный вызов для постепенного исчезновения в следующем изображении, как только закончится первое (и т. Д. И т. Д.)

...
hide all elements initially
...
$("#slide1").fadeIn(1000, function() { call next fadeIn here } 
...
0 голосов
/ 29 августа 2011

Вы можете hide все изображения изначально через саму css.Это будет лучше для пользователя.У вас было несколько ошибок js в вашей скрипке.

Посмотрите на эту скрипку, все ошибки исправлены.

http://jsfiddle.net/dRhHZ/13/

0 голосов
/ 29 августа 2011

Вы ошиблись именами ID (slide против slice). Кроме того, в jsfiddle не включайте теги сценария в раздел сценариев.

$(document).ready(function() {
    setTimeout( function(){$("#slice1").hide().fadeIn(1000);}, 500);
    setTimeout( function(){$("#slice2").hide().fadeIn(1000);}, 700);
    setTimeout( function(){$("#slice3").hide().fadeIn(1000);}, 900);
    setTimeout( function(){$("#slice4").hide().fadeIn(1000);}, 1100);
    setTimeout( function(){$("#slice5").hide().fadeIn(1000);}, 1300);
    setTimeout( function(){$("#slice6").hide().fadeIn(1000);}, 1500);
});

http://jsfiddle.net/dRhHZ/12/


Другой способ сделать это, если вы хотите исключить setTimeout s и просто использовать анимацию jquery:

http://jsfiddle.net/dRhHZ/14/

$(document).ready(function() {
    $("#slice1").delay(500).hide(1).fadeIn(1000);
    $("#slice2").delay(700).hide(1).fadeIn(1000);
    $("#slice3").delay(900).hide(1).fadeIn(1000);
    $("#slice4").delay(1100).hide(1).fadeIn(1000);
    $("#slice5").delay(1300).hide(1).fadeIn(1000);
    $("#slice6").delay(1500).hide(1).fadeIn(1000);
});

ПРИМЕЧАНИЕ: hide ставится в очередь, пока ему дается длительность, следовательно, 1 миллисекунда.

0 голосов
/ 29 августа 2011

Код, который вы указали, не работает по 2 причинам:

  1. Ваш поиск идентификатора в JS для "slideX", но div называются "sliceX"
  2. Чтобы их затемнить, они должны быть видны в начале, поэтому я добавил стиль "display: none" в .sliceSpecs

http://jsfiddle.net/dRhHZ/9/

0 голосов
/ 29 августа 2011

Прежде всего, в вашем коде JS вы написали срез неправильно (у вас это как слайд).Как только вы исправите это, вы должны изменить свой JS, чтобы использовать обратные вызовы, а не объединять методы в цепочку, как у вас:

setTimeout(function(){
    $("#slice1").hide(function(){
        $(this).fadeIn(1000);
    });
}, 500);

Если вы измените каждый из вызовов на setTimeout соответствующим образом, я думаю, выполучить желаемый эффект.

...