我正在尝试检查成帧滚动事件中的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'
答案 0 :(得分:2)
与==
相当的Coffeescript为is
,实际上相当于===
(检查值和类型)。
话虽如此,if scrollComp.isMoving == false
说起来有点尴尬,在JS中说unless scrollComp.isMoving
或if(!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。