Перезагрузить функцию jQuery после запуска PrettyPhoto - PullRequest
0 голосов
/ 22 апреля 2011

Надеюсь, название не требует пояснений. В любом случае, Я пытаюсь перезагрузить (или перечитать) функцию в jQuery после запуска другого процесса (в данном случае плагин prettyPhoto).

Это моя текущая функция jQuery:

        /** Scrolling Sidebar function **/
            var $sidebar   = $(".sideBar"),
                $window    = $(window),
                $mainImage = $(".mainImage"),
                offset     = $sidebar.offset(),
                threshold  = $mainImage.height() - $sidebar.height(),
                topPadding = 15;

    <?php if ( $options['scroll_sidebar'] == true ) { ?>
        if( $mainImage.height() >= 400 ) {
            $window.scroll(function() {
                if ($window.scrollTop() > threshold) {
                    if( $('.sideBar').has('.zoomImage').length ) {
                        $sidebar.stop().animate({
                            marginTop: threshold + 50
                        });
                    } else {
                        $sidebar.stop().animate({
                            marginTop: threshold + 60
                        });
                    }
                } else if ($window.scrollTop() > offset.top) {
                    $sidebar.stop().animate({
                        marginTop: $window.scrollTop() - offset.top + topPadding
                    });
                } else {
                    $sidebar.stop().animate({
                        marginTop: '40px'
                    });
                }
            });
        }
    <?php } ?>

И prettyPhoto запускается при нажатии на тег привязки с классом fullSize.

Я следовал за этим потоком, чтобы перезагрузить «кодовый блок», используя метод setTimeout. Вот что я сделал: (обернул предыдущий код внутри функции, использовал setTimeout внутри этой функции, а затем вызвал setTimeout вне функции)

    /** Scrolling Sidebar function **/
function scrollSidebar() {
            var $sidebar   = $(".sideBar"),
                $window    = $(window),
                $mainImage = $(".mainImage"),
                offset     = $sidebar.offset(),
                threshold  = $mainImage.height() - $sidebar.height(),
                topPadding = 15;

    <?php if ( $options['scroll_sidebar'] == true ) { ?>
        if( $mainImage.height() >= 400 ) {
            $window.scroll(function() {
                if ($window.scrollTop() > threshold) {
                    if( $('.sideBar').has('.zoomImage').length ) {
                        $sidebar.stop().animate({
                            marginTop: threshold + 50
                        });
                    } else {
                        $sidebar.stop().animate({
                            marginTop: threshold + 60
                        });
                    }
                } else if ($window.scrollTop() > offset.top) {
                    $sidebar.stop().animate({
                        marginTop: $window.scrollTop() - offset.top + topPadding
                    });
                } else {
                    $sidebar.stop().animate({
                        marginTop: '40px'
                    });
                }
            });
        }

        $('a.fullSize').click(function() {
            setTimeout(scrollSidebar, 1000);
        });
<?php } ?>

    }
setTimeout(scrollSidebar, 1000);

К сожалению, это не сработало. Итак, есть ли у вас какие-либо идеи относительно того, как я могу перезагрузить / перечитать функцию после запуска другого действия / плагина?

Спасибо!
Chris

1 Ответ

2 голосов
/ 22 апреля 2011

«Я пытаюсь перезагрузить (или перечитать) функцию в jQuery после запуска другого процесса»

почему вы вызываете setTimeout?это вызовет вызов функции через определенное время, а затем выполнит цикл / повтор каждые 1000 мс.Если вы просто хотите перезагрузить функцию, просто вызовите саму функцию.

 $('a.fullSize').click(function() {
            scrollSidebar();
        });

РЕДАКТИРОВАТЬ: ваше красивое изображение, вероятно, делает что-то, что влияет на полосу прокрутки.Однако http://www.no -margin-for-errors.com / projects / prettyphoto-jquery-lightbox-clone / Documentation / имеет атрибут обратного вызова.Поэтому сделайте так: (функция обратного вызова будет вызываться всякий раз, когда perryimaege закрывается, так как проблема, с которой вы столкнулись, заключается в том, что открывается симпатичное изображение. Так что уважайте, почему событие click не решило вашу проблему (код, вероятно, работал))Вам нужно что-то, ПОЧЕМУ изображение закрыто

$("a[rel^='prettyPhoto']").prettyPhoto({
        allow_resize: true,
        theme: 'facebook', /* light_rounded / dark_rounded / light_square / dark_square / facebook */
        callback: sideBar
    });

и объявите свою боковую панель в другом месте

function sideBar()
{
    var $sidebar   = $(".sideBar"),
    $window    = $(window),
    $mainImage = $(".mainImage"),
    offset     = $sidebar.offset(),
    threshold  = $mainImage.height() - $sidebar.height(),
    topPadding = 15;

    if( $mainImage.height() >= 400 ) {
        $window.scroll(function() {
            if ($window.scrollTop() > threshold) {
                if( $('.sideBar').has('.zoomImage').length ) {
                    $sidebar.stop().animate({
                        marginTop: threshold + 50
                    });
                } else {
                    $sidebar.stop().animate({
                        marginTop: threshold + 60
                    });
                }
            } else if ($window.scrollTop() > offset.top) {
                $sidebar.stop().animate({
                    marginTop: $window.scrollTop() - offset.top + topPadding
                });
            } else {
                $sidebar.stop().animate({
                    marginTop: '40px'
                });
            }
        });
    }   
}

рабочий код с вашего веб-сайта http://jsfiddle.net/qeDwM/

...