javascript - 当页面位于 Y 位置时开始计数

标签 javascript position counter

我的计数器有问题。 我想要这样的页面: https://www.phishlabs.com/

我有我的功能:

function count(id, start, end, duration) {
    var obj = document.getElementById(id);
    var range = end - start;
    var minTimer = 50;
    var stepTime = Math.abs(Math.floor(duration / range));
    stepTime = Math.max(stepTime, minTimer);
    var startTime = new Date().getTime();
    var endTime = startTime + duration;
    var timer;
    function run() {
        var now = new Date().getTime();
        var remaining = Math.max((endTime - now) / duration, 0);
        var spanclass = Math.round(end - (remaining * range));
        obj.innerHTML = spanclass;
        if (spanclass == end) {
            clearInterval(timer);
        }
    }

    timer = setInterval(run, stepTime);
    run();
}
count("spanclass", 1, 648, 2000);

此脚本在页面加载时开始计数,例如,当页面位于 "y" 位置或 "bottom" 位置时,我需要启动此函数。

最佳答案

i need to start this function when page was on "y" position

然后您需要在 scroll 事件上调用函数处理程序,

document.addEventListener('scroll', function(){
  // inside this handler check if it reached y and eventually call your function
   if (window.scrollY > 444)
     yourFunction()
})
<小时/>

这是一个例子:

function count(id, start, end, duration) {
    var obj = document.getElementById(id);
    var range = end - start;
    var minTimer = 50;
    var stepTime = Math.abs(Math.floor(duration / range));
    stepTime = Math.max(stepTime, minTimer);
    var startTime = new Date().getTime();
    var endTime = startTime + duration;
    var timer;
    function run() {
        var now = new Date().getTime();
        var remaining = Math.max((endTime - now) / duration, 0);
        var spanclass = Math.round(end - (remaining * range));
        obj.innerHTML = spanclass;
        if (spanclass == end) {
            clearInterval(timer);
        }
    }

    timer = setInterval(run, stepTime);
    run();
}

document.addEventListener('scroll', handler)

function handler(){
  if(window.scrollY < 900)
	return
  count("spanclass", 1, 648, 2000)
  document.removeEventListener('scroll', handler)
}
body{
  height:2000px
}
span{
  display:block;
  margin-top:1000px
}
<span id='spanclass'>hei</span>

我创建了一个命名处理程序,以便能够在触发后将其删除(您只需要一次),在 handler 内,您将看到对 removeEventListener() 的调用,希望这有帮助...

关于javascript - 当页面位于 Y 位置时开始计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207062/

相关文章:

Javascript 点击计数并提交到文本区域

Python 地向字典添加键

javascript - 错误 : Invalid value for <rect> attribute width ="NaN" 6d3. v3.min.js:1 错误:<text> 属性 x ="NaN"的值无效

javascript - 在现代浏览器中上传文件的最佳方式是什么

css - 宽度为 100% 中心的背景图像以固定位置

java - 在 StringBuilder 对象中查找某个字母多次出现

java - 文本文件的字符数

javascript - 使用 Dojo ContentPanel 滚动到特定位置

javascript - PouchDB 太多递归 - 远程连接上的 Stackoverflow

html - 根据其他要求将 div 移动到父级的底部