我希望标题不言自明。无论哪种方式,我试图在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);
可悲的是,这没用。那么,一旦触发了另一个动作/插件,您对如何重新加载/重新读取函数有任何想法吗?
谢谢!
克里斯
答案 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'
});
}
});
}
}
的代码