Javascript 如何只运行一次JS函数?
当用户从我的网站滚动到特定的元素id时,我想弹出一个窗口 目前,我成功地做到了这一点,但它是在一个循环中工作的,在执行一次之后,我无法停止该函数 下面是我的JS代码:Javascript 如何只运行一次JS函数?,javascript,jquery,function,scroll,Javascript,Jquery,Function,Scroll,当用户从我的网站滚动到特定的元素id时,我想弹出一个窗口 目前,我成功地做到了这一点,但它是在一个循环中工作的,在执行一次之后,我无法停止该函数 下面是我的JS代码: $(window).scroll(function() { var executed = false; if (!executed){ executed = true; var hT = $('#scroll-to').offset().top, hH = $('#scroll-to').out
$(window).scroll(function() {
var executed = false;
if (!executed){
executed = true;
var hT = $('#scroll-to').offset().top,
hH = $('#scroll-to').outerHeight(),
wH = $(window).height(),
wS = $(this).scrollTop();
if (wS > (hT+hH-wH)){
<!--
window.setTimeout('window.location="javascript:showSuccessToast();"; ',2000);
// -->
}}
});
$(窗口)。滚动(函数(){
var=false;
如果(!已执行){
已执行=真;
var hT=$('#滚动到“).offset().top,
hH=$(“#滚动到”).outerHeight(),
wH=$(窗口).height(),
wS=$(this.scrollTop();
如果(wS>(hT+hH-wH)){
}}
});
当“executed”变量变为true时,我无法理解为什么函数会执行。
我如何管理它只触发一次showsuccessToast?每次触发事件时,您的函数都会从头开始执行-这包括初始化执行的
。换句话说,每次函数运行时,您都将executed
设置回false
要解决此问题,需要将变量定义拉到函数外部:
var executed = false;
$(window).scroll(function() {
if (!executed) {
executed = true;
...
}
});
每次触发事件时,您的函数都会从头开始执行-这包括初始化执行的
。换句话说,每次函数运行时,您都将executed
设置回false
要解决此问题,需要将变量定义拉到函数外部:
var executed = false;
$(window).scroll(function() {
if (!executed) {
executed = true;
...
}
});
当滚动事件发生时,执行的var总是设置为false。这意味着它在你的功能中是无用的 将已执行的退出事件函数应起作用
var executed = false;
$(window).scroll(function() {
var hT = $('#scroll-to').offset().top,
hH = $('#scroll-to').outerHeight(),
wH = $(window).height(),
wS = $(this).scrollTop();
if (wS > (hT+hH-wH)){
if (!executed){ executed = true;
<!--
window.setTimeout('window.location="javascript:showSuccessToast();"; ',20);
// -->
}}
});
var executed=false;
$(窗口)。滚动(函数(){
var hT=$('#滚动到“).offset().top,
hH=$(“#滚动到”).outerHeight(),
wH=$(窗口).height(),
wS=$(this.scrollTop();
如果(wS>(hT+hH-wH)){
如果(!executed){executed=true;
}}
});
当滚动事件发生时,执行的var总是设置为false。这意味着它在你的功能中是无用的
将已执行的退出事件函数应起作用
var executed = false;
$(window).scroll(function() {
var hT = $('#scroll-to').offset().top,
hH = $('#scroll-to').outerHeight(),
wH = $(window).height(),
wS = $(this).scrollTop();
if (wS > (hT+hH-wH)){
if (!executed){ executed = true;
<!--
window.setTimeout('window.location="javascript:showSuccessToast();"; ',20);
// -->
}}
});
var executed=false;
$(窗口)。滚动(函数(){
var hT=$('#滚动到“).offset().top,
hH=$(“#滚动到”).outerHeight(),
wH=$(窗口).height(),
wS=$(this.scrollTop();
如果(wS>(hT+hH-wH)){
如果(!executed){executed=true;
}}
});
另一个选项是使用以下JS代码:
$(window).scroll(myScrollFunction);
function myScrollFcuntion()
{
// do things
$(window).unbind("scroll", myScrollFunction);
}
另一个选项是使用以下JS代码:
$(window).scroll(myScrollFunction);
function myScrollFcuntion()
{
// do things
$(window).unbind("scroll", myScrollFunction);
}
可能重复的
$(窗口)。一个(“滚动”,函数(){…})代码>不需要自己处理。@Frederic,但请指着一张文件,这样他就可以跟上来了<代码>window.setTimeout('window.location=“javascript:showSuccessToast();”;”,2000)代码>。。。什么?为什么不干脆设置超时(showSuccessToast,2000)
?可能重复$(窗口)。一个(“滚动”,函数(){…})代码>不需要自己处理。@Frederic,但请指着一张文件,这样他就可以跟上来了<代码>window.setTimeout('window.location=“javascript:showSuccessToast();”;”,2000)代码>。。。什么?为什么不干脆设置超时(showSuccessToast,2000)
?如果用户刷新页面怎么办?它会再次启动吗?现在它只在我重新加载页面并且id显示在窗口中时才会启动:(如果我从顶部滚动到id,它不会启动当然它会启动(你说的“启动”是什么意思?)再次。当用户刷新页面时,内存将被刷新。因此执行将重置为false。到底是谁将我的答案更改为不正确的答案?如果用户将刷新页面怎么办?它会再次触发吗?现在,它仅在我重新加载页面且id显示在窗口中时才会触发:(如果我从顶部滚动到id,它不会启动当然它会再次启动(你说的启动是什么意思?)。当用户刷新页面时,内存将被刷新。因此执行将重置为false。到底是谁将我的答案更改为不正确的答案?现在它只在我重新加载页面并且id显示在窗口中时启动:(如果我从顶部滚动到id,它不会fire@GeorgeL.您必须将executed=true
行移动到只想执行一次的位置。在这种情况下,可能在if块内。但它在if块中,我指的是if(wS>(hT+hH-wH)){
block。如果这也不起作用,那么问题在于规则逻辑。是的,我同意@JJJ-您可能希望在触发成功toast后,将设置executed
的行移到true。现在,只有当我重新加载页面并且id出现在窗口中时,它才会触发:(如果我从顶部滚动到id,它不会fire@GeorgeL.您必须将executed=true
行移动到只想执行一次的位置。在这种情况下,可能在if块内。但它在if块中,我指的是if(wS>(hT+hH-wH)){
block。如果这也不起作用,那么问题出在规则逻辑上。是的,我同意@JJJ-您可能希望在触发成功toast之后将设置执行的的行移到true。好吧,现在它不触发事件。好吧,现在它不触发事件