让javascript函数只运行一次

让javascript函数只运行一次,javascript,html,Javascript,Html,我正在尝试在我的网站上运行此脚本。它在视口中显示id时触发警报。问题在于,在视口中显示id时,警报会一直运行。不能让它只运行一次。我怎么能这样做 function inViewport( element ){ // Get the elements position relative to the viewport var bb = element.getBoundingClientRect(); // Check if the element is outside the view

我正在尝试在我的网站上运行此脚本。它在视口中显示id时触发警报。问题在于,在视口中显示id时,警报会一直运行。不能让它只运行一次。我怎么能这样做

function inViewport( element ){
  // Get the elements position relative to the viewport
  var bb = element.getBoundingClientRect();
  // Check if the element is outside the viewport
  // Then invert the returned value because you want to know the opposite
  return !(bb.top > innerHeight || bb.bottom < 0);
}

var myElement = document.querySelector( 'holaTest' );
// Listen for the scroll event
document.addEventListener( 'scroll', event => {
  // Check the viewport status
  if( inViewport( myElement ) ){
        alert('hello there')
  }
})
函数inViewport(元素){
//获取元素相对于视口的位置
var bb=element.getBoundingClientRect();
//检查元素是否在视口之外
//然后反转返回值,因为您想知道相反的结果
返回!(bb.top>innerHeight | | bb.bottom<0);
}
var myElement=document.querySelector('holaTest');
//收听滚动事件
document.addEventListener('scroll',event=>{
//检查视口状态
if(输入端口(myElement)){
警报('你好')
}
})

您可以这样做:添加一个控制第一时间的布尔变量

var bool=true;
function inViewport( element ){
  // Get the elements position relative to the viewport
  var bb = element.getBoundingClientRect();
  // Check if the element is outside the viewport
  // Then invert the returned value because you want to know the opposite
  return !(bb.top > innerHeight || bb.bottom < 0);
}

var myElement = document.querySelector( 'holaTest' );
// Listen for the scroll event
document.addEventListener( 'scroll', event => {
  // Check the viewport status
  if( inViewport( myElement ) && bool){
    bool=false;
    alert('hello there')
  }
})
var bool=true;
函数inViewport(元素){
//获取元素相对于视口的位置
var bb=element.getBoundingClientRect();
//检查元素是否在视口之外
//然后反转返回值,因为您想知道相反的结果
返回!(bb.top>innerHeight | | bb.bottom<0);
}
var myElement=document.querySelector('holaTest');
//收听滚动事件
document.addEventListener('scroll',event=>{
//检查视口状态
if(输入端口(myElement)和布尔){
布尔=假;
警报('你好')
}
})

除了Andre的答案之外,当警报在视口中时,您只能检查一次。这样,它会在元素位于视口中时发出一次警报:

函数inViewport(元素){
//获取元素相对于视口的位置
var bb=element.getBoundingClientRect();
//检查元素是否在视口之外
//然后反转返回值,因为您想知道相反的结果
返回!(bb.top>innerHeight | | bb.bottom<0);
}
var myElement=document.querySelector('.holaTest');
//收听滚动事件
var t=真;
document.addEventListener('scroll',event=>{
//检查视口状态
国际单项体育联合会(国际单项体育联合会){
警报(‘你好’);
console.log(“try”);
t=假;
} 
如果(!inViewport(myElement)){
t=真;
}
})