Зареждане на съдържание на fancybox в div?

Опитвам се да променя функционалността на fancybox 2, като поставя съдържанието вътре в div (вместо да го плавам в центъра на екрана), който първо ще бъде скрит и ще се разшири, за да пасне на съдържанието му. Когато натиснете бутона за затваряне, div ще се свие и ще се скрие отново.

Използвам тип iframe fancybox за това и съдържанието, което ще бъде заредено, е html. Опитах се да използвам appendTo, но нямах успех, някакви идеи как да извадя това?

fancybox js файл:

overlay:f('<div class="fancybox-overlay"></div>').appendTo(b.parent||"body")

ако appendTo myDiv нищо не се променя (съдържанието все още се зарежда, но в средата на тялото):

overlay:f('<div class="fancybox-overlay"></div>').appendTo("#myDiv")

person zefs    schedule 01.09.2013    source източник
comment
публикувайте примерен код или jsfiddle   -  person Michael B.    schedule 01.09.2013
comment
В момента използвам кода на fancybox по подразбиране, но не съм сигурен как да заредя съдържанието му в определен div, но затова не публикувах никакъв код.   -  person zefs    schedule 01.09.2013
comment
Мисля, че нямате нужда от fancybox за това   -  person JFK    schedule 01.09.2013


Отговори (2)


Може да не се нуждаете от fancybox за това, но създайте свой собствен персонализиран скрипт.

Просто за забавление, с html като този

<a class="myfancy" href="http://jsfiddle.net/">show my content in div</a>
<div id="targetContent"> 
    <a id="myClose" href="/bgjavascript:;">X</a>
    <iframe id="targetIframe"></iframe>
</div>

използвайте малко CSS, за да скриете харесването #targetContent

#targetContent {
    position: relative;
    display: none;
    width: 500px;
    height: 350px;
    overflow: visible;
    background-color: #fff;
}

и оформете своя бутон за затваряне #myClose по начина, по който имате нужда.

Също така задайте основния CSS за iframe като

#targetIframe {
    width: 100%;
    height: 100%;
    border: 0 none;
}

След това използвайте този код, за да свържете всичките си селектори към техните конкретни събития и обратни извиквания за плавни преходи

jQuery(function ($) {
    // cache elements
    var $targetDiv = $("#targetContent"),
        $iframe = $targetDiv.find("#targetIframe"),
        $close = $targetDiv.find("#myClose");
    // bind click events to first link and close button
    $(".myfancy").on("click", function (e) {
        e.preventDefault();
        $iframe.attr({
            "src": this.href // add the content to iframe before showing
        }).parent($targetDiv).slideDown(500, function () { //show div
            $close.fadeIn(200).on("click", function () { 
                $(this).fadeOut(100, function () { // fade out close button
                    $targetDiv.slideUp(500, function () { // hid div by sliding it up
                        $iframe.removeAttr("src"); // remove after closing the box
                    }); // slideUp
                }); // close fadeOut                
            }); // on click myClose
        }); // slideDown
    }); // on click link
}); // ready

Вижте JSFIDDLE

ЗАБЕЛЕЖКА: .on() изисква jQuery v1.7

person JFK    schedule 01.09.2013
comment
Вашият пример е страхотен, но исках да използвам fancybox, за да мога да използвам следващата/предишната функционалност за всички мои html страници, както и бутона за затваряне и заглавието основно. Мислите ли, че добавянето на fancybox в друг iframe, който ще действа като вашия пример, би било възможно? Ето един сайт, който показва ефекта, който търся, просто щракнете върху един от елементите на портфолиото: bybu.es - person zefs; 02.09.2013
comment
@zefs : да, ще стане. Проверете демонстрацията на тази публикация stackoverflow.com/a/8855410/1055987 и тя ще се държи като левия iframe. - person JFK; 02.09.2013
comment
Благодаря, ще опитам това :) Отбелязвам отговора ви като приет, но ще публикувам отново тук, ако заседна в процеса. - person zefs; 02.09.2013
comment
И така, мислех за това отново и използването на 2 вградени рамки за това вероятно не е най-добрият метод. Ще бъде ли твърде трудно да се внедрят следващи/предишни бутони и rel функционалност (като на fancybox) на вашия пример? - person zefs; 02.09.2013
comment
@zefs: толкова трудно, колкото персонализирането на fancybox за отваряне в div (би било като създаване на нов плъгин). Предполагам, че ще ми отнеме повече време, отколкото обикновено бих отделил за отговаряне на въпроси в stackoverflow, съжалявам :/ - person JFK; 02.09.2013
comment
Да разбирам. Без притеснения обаче, можете ли да ми кажете как да преоразмеря динамично iframe във вашия пример, за да пасне на съдържанието му? Намерих кода и зададох нов въпрос тук: stackoverflow. com/questions/18566941/ - Кодът работи, но не анимира. - person zefs; 02.09.2013
comment
@zefs: в моя пример iframe има размер 100%x100%, така че се настройва към размера на родителския контейнер <div id="targetContent">, така че просто трябва да промените размерите на такъв div, динамично, ако искате да използвате .css() или .animate() - person JFK; 02.09.2013
comment
Да, но как да му кажете да пасва динамично съдържанието си с помощта на animate? Това ми дава фиксирана височина на всяко съдържание: $("#targetContent").animate({ height:$("#targetIframe").height() },500); Не е ли необходим contentWindow, за да работи? като на другия въпрос, който свързах. - person zefs; 02.09.2013
comment
добре, може да се наложи да зададете конкретни размери на всяка страница (HTML тага) и да използвате .contents(), за да намерите размера на всеки iframe и съответно да преоразмерите своя div. Като в този пример с fancybox stackoverflow.com/a/12192258/1055987 - person JFK; 02.09.2013
comment
Хм, не точно това, което търсех (ръчно добавяне на размерите). Със сигурност не можем да интегрираме animate на jquery в този пример? $('iframe').load(function() { this.style.height = this.contentWindow.document.body.offsetHeight + 'px'; }); - person zefs; 02.09.2013
comment
@zefs : лично аз не бих разчитал на това, защото може да е наистина бъгово (направих всякакви тестове, докато отговарях на този въпрос) ... все пак можете да опитате. - person JFK; 02.09.2013
comment
Добре, тогава ако просто исках да заредя моя текущ fancybox вътре в #targetIframe и да запазя функционалността на вашия скрипт, как бих направил това? - person zefs; 02.09.2013
comment
@zefs: не ме разбирайте погрешно, но както в предишния ми коментар, това би бил труден и дълъг процес на персонализиране, освен ако не отворите fancybox от самия iframe, както беше предложено по-рано stackoverflow.com/a/8855410/1055987 - person JFK; 02.09.2013
comment
JFK, мисля, че го намерих! Въпреки че има малък проблем, понякога няколко пиксела от долната част на съдържанието се губят след многократно щракване върху връзките. Някакви идеи? $('iframe').load(function() { $(this).animate({ height:( $(this).contents().find("body").height()) },500); }); - person zefs; 02.09.2013
comment
Nvm, добавянето на ‹br› към html файловете помогна. Има друг проблем, въпреки че понякога не се анимира, предполагам, че това е причината, поради която споменахте бъги. Предполагам, че е причинено от $iframe.removeAttr(src); - person zefs; 02.09.2013
comment

Можете да добавите опция parentEl към опциите на fancybox,

Точно като parentEl: '.myDivClass'

person rafee_que_    schedule 20.02.2020