节日快乐!我该如何运行此功能?我可以看到在鼠标滚轮上运行的console.log,但是设置为运行一次的函数不会运行。在开始时,我还确保正文包含所需的类。
var $body = $('body');
//using index
if(index == 2){
$body.css({
overflow: 'hidden'
});
if($body.hasClass('fp-viewing-secondPage')) {
$('html').on('mousewheel', function (e) {
console.log('fucks');
var delta = e.originalEvent.wheelDelta;
if($body.hasClass('setAn1')){
var something = (function() {
var secret = false;
return function () {
if(!secret){
console.log('call me once please an1');
secret = true;
}
};
});
something();
}
if($body.hasClass('setAn2')){
var something2 = (function() {
var secret = false;
return function () {
if(!secret){
console.log('call me once please an2');
secret = true;
}
};
});
something2();
}
});
}
}
答案 0 :(得分:3)
var something = (function() {
var secret = false;
return function () {
if(!secret) {
console.log('call me once please an1');
secret = true;
}
};
})();
你有上面的块是IIFE。我相信它所做的是将以下函数分配给变量。
function () {
if(!secret) {
console.log('call me once please an1');
secret = true;
}
你必须在这里调用某事()。
secret = true;
}
};
})();
something();
}
我将你的程序结构移植到jfiddle中。您的主要问题是您正在修改在函数定义创建的范围内定义的值。只要该函数当前正在执行,该值仅持续一旦您离开函数,该值将离开作用域。你需要做的是定义函数范围之外的变量,这样你就不会失去你在点击之间保持的状态。
这是一个极小的例子。一旦完成循环,您将看到秘密被设置,然后阻止函数再次评估if()条件。
<img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png">
var secret = false;
$('img').on('click', function(e) {
console.log('what is my secret outside?', secret);
if (!secret) {
console.log('what is my secret inside?', secret);
secret = true;
}
});
答案 1 :(得分:0)
var something = (function() {
var secret = false;
return function () {
if(!secret){
console.log('call me once please an1');
secret = true;
}
};
});
var something2 = (function() {
var secret = false;
return function () {
if(!secret){
console.log('call me once please an2');
secret = true;
}
};
});
var $body = $('body');
//using index
if(index == 2){
$body.css({
overflow: 'hidden'
});
if($body.hasClass('fp-viewing-secondPage')) {
$('html').on('mousewheel', function (e) {
console.log('fucks');
var delta = e.originalEvent.wheelDelta;
if($body.hasClass('setAn1')){
something();
}
if($body.hasClass('setAn2')){
something2();
}
});
}
}
否则:
function runOnce(fun) {
var secret = false;
return function () {
if(!secret){
fun();
secret = true;
}
};
}
var something = runOnce(function() {
console.log('call me once please an1');
});
var something2 = runOnce(function() {
console.log('call me once please an2');
});