Как да плъзнете надолу div след това .fadeIn() съдържанието и обратно?

Цел

Когато потребител щракне върху бутона, въпросният div ще:

  1. плъзнете надолу
  2. Спри се
  3. избледняват в съдържанието

Когато потребителят щракне върху бутона отново, div ще:

  1. отминава
  2. Спри се
  3. пързалям се на горе

Текущата позиция

Ето пример, при който fadeIn и fadeOut се случва в точното време, но няма ефект на слайд преди и след съответно fadeIn и fadeOut
http://jsfiddle.net/tkRGU/1/

Освен това има тази опция, която има функцията slideToggle, но няма fadeIn и fadeOut, появяващи се съответно след и преди слайда.
http://jsfiddle.net/MY8DD/7/


person Classer    schedule 08.02.2011    source източник
comment
ако потребителите не могат да видят div, когато се плъзга надолу, защо изобщо трябва да се плъзга надолу? Защо просто не го избледнеете навътре и навън? Премества друго съдържание на страница нагоре/надолу?   -  person jacobangel    schedule 08.02.2011
comment
jacobangel правилно, той измества другото съдържание на страницата нагоре и надолу   -  person Classer    schedule 08.02.2011


Отговори (5)


Това ще работи:

HTML:

<a href="/bg#" onclick="toggleSlider();">toggle</a>
<div id="panelThatSlides" style="display:none;background:#eee;padding:10px;">
    <div id="contentThatFades" style="opacity:0;filter:alpha(opacity=0);">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ut tortor  erat, et consectetur nisl. Nunc non placerat odio. Cras feugiat  pulvinar diam sed sollicitudin. Quisque ut elit lacus, et gravida nunc.  Maecenas ac enim ligula. Aenean felis nunc, vulputate pellentesque  vehicula nec, tristique a tortor. Curabitur et semper dui. Sed id nisl  turpis. Sed vel nunc et nisi laoreet feugiat. Sed lobortis enim sed arcu  tempor vehicula. Vivamus dui ligula, ultricies id egestas ut, rhoncus  et est. Pellentesque dignissim diam vel nibh tempus condimentum. Etiam  sodales fermentum pharetra. Etiam faucibus tempus malesuada. Mauris  nulla lectus, laoreet sit amet cursus vel, ultricies at enim. Sed  facilisis rutrum eros, nec malesuada eros iaculis ac.
        <br /><br />
        In consectetur faucibus fermentum. Pellentesque habitant morbi tristique  senectus et netus et malesuada fames ac turpis egestas. Cras nunc  magna, vestibulum eget pulvinar hendrerit, tincidunt id arcu. Nullam  dolor ligula, suscipit placerat condimentum ac, feugiat ut mauris.  Suspendisse semper dolor condimentum dui ornare rhoncus. In bibendum  massa vel erat tristique congue. Donec vel mi quam, ac iaculis odio.  Nulla interdum orci quis ligula aliquam viverra. Nam eget egestas  mauris. Sed in massa quis erat venenatis aliquam.
    </div>
</div>

Javascript:

function toggleSlider() {
    if ($("#panelThatSlides").is(":visible")) {
        $("#contentThatFades").animate(
            {
                opacity: "0"
            },
            600,
            function(){
                $("#panelThatSlides").slideUp();
            }
        );
    }
    else {
        $("#panelThatSlides").slideDown(600, function(){
            $("#contentThatFades").animate(
                {
                    opacity: "1"
                },
                600
            );
        });
    }   
}

Работещ пример за JS Fiddle.

За IE просто се уверете, че има фонов цвят зад съдържанието за cleartype.

person Solid Source    schedule 09.02.2011
comment
Опитах този скрипт с тригери onmouseover и onmouseout, но не работи правилно. Понякога div се появява и изчезва веднага, когато onmouseover се задейства. След това превключването започва да се проваля, div избледнява, докато onmouseout се задейства и т.н. Мога ли да получа вашите предложения? - person Sencer H.; 19.08.2013

Изглежда, че тъй като искате двете операции да се извършват едновременно, трябва да използвате функцията animate. В противен случай действията ще идват едно след друго.

Ако знаете височината на елемента, преди да го стартирате, тогава можете да настроите нещата доста лесно. Ето един изключително груб пример: http://jsfiddle.net/tArQu/

person jacobangel    schedule 08.02.2011
comment
jacobangel, съжалявам, че трябваше да бъда по-ясен в целта си. Актуализирах въпроса си с по-ясно обяснение на моята цел, но накратко, когато се щракне върху бутона, слайдът се случва първо, след като слайдът е завършен, има спиране, след което се случва избледняване на съдържанието. - person Classer; 09.02.2011
comment
Знаете ли височината на кутията? Ако го направите, просто обвийте съдържанието с друг div. Първо разгънете div, след това избледнейте обвитото съдържание. Ако не знаете, най-доброто, което можете да направите, е да познаете така: jsfiddle.net/MY8DD/35 - person jacobangel; 09.02.2011

$("#button").toggle(function(){
    $("#content").slideDown().fadeIn();
    }, function(){
    $("#content").slideUp().fadeOut();
    return false;
});    

Това е, което търсите?

person benhowdle89    schedule 08.02.2011
comment
Няма ли допълнителният fadeIn/Out да направи нищо, тъй като slideDown/Up вече разкрива/скрива съдържанието? - person jacobangel; 08.02.2011
comment
jacobangel е прав, това не работи. това е еквивалентно на използването на .slideToggle(). .fadeIn() и .fadeOut() не правят нищо :( - person Classer; 08.02.2011

Ако не знаете предварително височината на елемента, е малко по-сложно. Трябва да анимирате непрозрачността директно, за да избледнее, и трябва да скриете съдържанието с CSS видимост, докато се „плъзга“.

Видимостта на CSS „скрита“ позволява на съдържанието да заема мястото в документа, което обикновено би заело, но да бъде скрито от изгледа; CSS показването "няма" не просто скрива елемента, а го премахва от документния поток. Като скрием елемента с помощта на видимост, можем да го плъзгаме надолу, докато достигне пълната му височина, докато съдържанието на елемента остава невидимо.

По същия начин, избледняването на съдържанието при използване на функцията fadeIn на jQuery предполага, че даден елемент първоначално е скрит с дисплей „няма“, така че няма да работи, ако използваме видимост. Вместо това, ние правим елемента първоначално напълно прозрачен (непрозрачност 0.0); след като плъзгащата се анимация завърши, задаваме видимост на „видима“ и след това анимираме непрозрачността от напълно прозрачна до напълно непрозрачна (0,0 до 1,0).

Ако приемем, че елементът първоначално е скрит (CSS дисплей "няма" или функция за скриване на jQuery):

$(element).css("visibility", "hidden").slideDown("slow", function() {
    $(this).css("opacity", 0.0).css("visibility", "visible").animate({
        "opacity": 1.0
    }, "slow");
});

N.B.: Бъдете особено внимателни, когато въвеждате „видимост“ и „видим“, тъй като те лесно се пишат грешно - източникът на много разочароващи грешки.

Не е необходимо да използвате видимост, тъй като можете да постигнете същото, като направите съдържанието първоначално прозрачно, но използването му прави по-ясно какво се случва. Тоест това също работи:

$(element).css("opacity", 0.0).slideDown("slow", function() {
    $(this).animate({
        "opacity": 1.0
    }, "slow");
});
person Ben    schedule 05.06.2012

Опитайте това: http://jsfiddle.net/solidsource/67XZX/

person Solid Source    schedule 08.02.2011
comment
хей, това изглежда доста добре, само че как иначе мога да извикам тази функция освен с помощта на таг ‹a›? Мисля за нещо повече като $('button').click(function(slideToggler)), но съм сигурен, че съм сгрешил там. - person Classer; 08.02.2011
comment
всъщност това не работи, просто плъзга 20px от подложката, действителното съдържание просто внезапно изскача - person Classer; 08.02.2011