听取framer scrollComponent上的滚动

时间:2017-07-24 19:30:07

标签: javascript coffeescript logic framerjs

我正在尝试检查成帧滚动事件中的deltaY并仅在deltaY == 0时执行函数。

看来framer(用coffeescript编写)没有办法检查这个。还有另一种说法(伪代码):

if the change of the Y scrolling has been zero for 30 frames, execute function

framer scroll事件有这种方法:

scrollComp.isMoving

在此页面上发现: https://framer.com/docs/#scroll.scrollcomponent

但如果我试试这个,那么在声明的其他部分

中什么都没有打印出来
if scrollComp.isMoving
    print 'moving'
else if scrollComp.isMoving == false
    print 'stopped'

///或者这也不起作用:

if scrollComp.isMoving
    print 'moving'
else 
    print 'stopped'

1 个答案:

答案 0 :(得分:2)

==相当的Coffeescript为is,实际上相当于===(检查值和类型)。

话虽如此,if scrollComp.isMoving == false说起来有点尴尬,在JS中说unless scrollComp.isMovingif(!scrollComp.isMoving)更有意义。

好的,对于你的问题的解决方案(我不相信上述两件事中的任何一个都会实际修复),当你执行这些print语句时,你很可能这样做当脚本启动而不是在事件处理程序中执行异步时。当您的页面加载时,您的代码输入if / else语句,此时您不会滚动,因此始终为false。要捕获滚动的时刻,并在代码发生时运行代码,您需要注册一个事件监听器:

scrollComp.onMove ->
  // Scrolling here! Do fancy stuff!
  print scrollComp.isMoving     // 'true'

现在,为了能够在滚动停止后30秒触发函数调用,我们必须跟踪时间:

// Define interval as 30 seconds.
// (expressed in milliseconds)
interval = 30*1000
time = Date.now() // set timer to now

scrollComp.onMove ->
  // We update the timer every time
  // scroller moves.
  time = Date.now()

// We need to create an infinite loop
// that will check the time since last 
// move of the scroller, and execute
// a function when the time has surpassed
// some threshold.
setInterval ->
  if (Date.now() - time) > interval
    // It has been 30 seconds since
    // scroller last moved.
, 5000 

最后5000个数字是运行时间检查的频率;这将每5000毫秒运行一次。

如果您真的想要计算帧数,可以通过calculating the frame rate动态生成interval变量,并使用一些代数jujitsu。