触发PrettyPhoto后重新加载jQuery函数

时间:2011-04-22 18:28:06

标签: jquery function reload

我希望标题不言自明。无论哪种方式,我试图在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 } ?>

当点击具有类fullSize的锚标记时,会触发prettyPhoto。

我跟着this线程使用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);
可悲的是,这没用。那么,一旦触发了另一个动作/插件,您对如何重新加载/重新读取函数有任何想法吗?

谢谢!
克里斯

1 个答案:

答案 0 :(得分:2)

“我试图在jQuery中重新加载(或重新读取)一个函数,之后又触发了另一个进程”

你为什么要调用setTimeout?这将在一定时间后触发函数调用,然后每1000ms循环/重复一次。如果您只想重新加载函数,只需调用函数本身。

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

编辑: 你漂亮的Image可能会影响Scrolbar。但是,http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/documentation/具有回调属性。所以我喜欢这样(每当关闭perryimaege就会调用回调函数,因为你遇到的问题就是它的漂亮图像被打开了。所以这就是为什么点击事件无法解决你的问题(代码可能正在工作))您需要AFTEr图像关闭

$("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/

的代码