我已经在现有的投资组合页面上构建了一个jQuery过滤器选项。 关键是,函数中有一个onScroll,当它们位于用户视口中时,该函数会继续在投资组合项上添加“显示”类。
现在,当我的功能处于“运行”状态时,我想禁用此功能。 这是我的代码:
function filterPortfolio() {
$('[data-filter]').on('click', function() {
var filterPortfolioIsRunning = true;
var filter = $(this);
var filterVal = $(this).attr('data-filter');
var filterItems = $('[data-filter-item]');
filter.toggleClass('active');
filterItems.removeClass('reveal');
filterItems.closest('.columns').addClass('hidden');
if ($('[data-filter]').hasClass('active')) {
$('[data-filter].active').each(function(){
var filters = $(this).attr('data-filter');
var object = $('[data-filter-item][data-filter-val*="' + filters + '"]');
object.closest('.columns').removeClass('hidden');
object.addClass('reveal');
});
} else {
filterItems.closest('.columns').removeClass('hidden');
filterItems.addClass('reveal');
}
});
}
现在,我将“ filterPortfolioIsRunning”设置为true,并希望在其他jQuery函数中识别出这一点。这段代码:
function revealProject() {
var scrollTop = $(document).scrollTop();
$('.project').each(function(e) {
if ($(window).width() > 767 && scrollTop > 0) {
if (($(this).offset().top + ($(this).height() - 200)) < (scrollTop + $(window).height())) {
$(this).addClass('reveal');
}
} else if ($(window).width() < 768) {
if (($(this).offset().top) < (scrollTop + $(window).height())) {
$(this).addClass('reveal');
}
}
});
if ($('.project').length > 0) {
setTimeout(function() {
$('.projects .columns:nth-child(1) .project, .projects .columns:nth-child(2) .project').addClass('reveal');
}, 2300);
}
}
我尝试这样做:&& !filterPortfolioIsRunning == true
,但是控制台日志显示找不到变量。我该如何工作?
谢谢!
答案 0 :(得分:1)
请尝试将filterPortfolio
移至全局空间,或使用filterPortfolioIsRunning
方法并将其存储在元素中,而不是data
内的局部变量,如下所示:
function filterPortfolio() {
$('[data-filter]').on('click', function() {
var filterPortfolioIsRunning = true;
// to stuff then save in the element...
$('[data-filter]').data('filter', filterPortfolioIsRunning);
});
}
function revealProject() {
if ( $('[data-filter]').data('filter') ) {
// no global variables prevent name collision!
}
}
答案 1 :(得分:0)
变量filterPortfolioIsRunning
在filterPortfolio
函数内部声明。您应该在该(和任何其他)函数之外声明变量。
这样,您将拥有一个可以从其他函数访问的全局变量。
var n = 1;
使其成为该函数的局部变量n = 1;
使其成为全局变量n = 1;
或var n = 1;
使其成为全局变量