- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
序曲。我是 Haskell 和函数式编程的新手,但我忍不住用 Haskell 编码,因为它太令人兴奋了!因此,我的问题可能非常简单和/或微不足道。我仍在阅读“为您学习 Haskell 大有裨益”,而 Monad 仍在路上。
考虑以下行为:
mousemove
事件,当事件触发时,将它们压入堆栈requestAnimationFrame
开始循环我无法实现的是如何从事件中获取感兴趣的值,例如pageX 或 clientX,看起来我必须对数据定义做一些事情,但我一直坚持下去。请帮忙。
附言我也无法理解如何检查外部函数的结果,例如当我尝试获取 DOM 元素时,结果可能是元素或 null
,因此,比方说,getElById
是不纯的,我需要检查我得到的结果。如何实现?似乎我可以使用类似的东西:data Element = Null |元素 ...
然后模式匹配结果,但是如何让外部函数知道预期结果?
更新
这里是所需逻辑的工作示例:
module MouseTracker where
import FFI
import Prelude
data Element
data Event
type EventStack = [Event]
data Frame
consLog :: a -> Fay ()
consLog = ffi "console.log(%1)"
reqFrame :: (Frame -> Fay ()) -> Fay ()
reqFrame = ffi "requestAnimationFrame(%1)"
getDoc :: Fay Element
getDoc = ffi "document"
createEl :: String -> Fay Element
createEl = ffi "document.createElement(%1)"
elById :: String -> Fay Element
elById = ffi "document.getElementById(%1)"
elSetId :: Element -> String -> Fay ()
elSetId = ffi "%1.setAttribute('id',%2)"
elSetHtml :: Element -> String -> Fay ()
elSetHtml = ffi "%1.innerHTML = %2"
docBodyAppend :: Element -> Fay ()
docBodyAppend = ffi "document.body.appendChild(%1)"
elListenWith :: Element -> String -> (Event -> Fay ()) -> Fay ()
elListenWith = ffi "%1.addEventListener(%2, %3)"
winListenWith :: String -> (Event -> Fay ()) -> Fay ()
winListenWith = ffi "window.addEventListener(%1,%2)"
docListener :: String -> (Event -> Fay ()) -> Fay ()
docListener evtType fn = do
doc <- getDoc
elListenWith doc evtType fn
createTrace :: Fay ()
createTrace = do
div <- createEl "div"
docBodyAppend div
elSetId div "trace"
createStack :: Fay ()
createStack = ffi "window._eventStack = []"
getStack :: Fay EventStack
getStack = ffi "window._eventStack"
updateStack :: EventStack -> Fay ()
updateStack = ffi "window._eventStack = %1"
emptyStack :: Fay ()
emptyStack = createStack
listenMice :: Fay()
listenMice = docListener "mousemove" trackMouse
where trackMouse :: Event -> Fay ()
trackMouse evt = do
stk <- getStack
updateStack (evt:stk)
renderFrame :: Frame -> Fay ()
renderFrame frame = do
stack <- getStack
if length stack > 0
then (do
let e = head stack
traceEventCoord e)
else (do return ())
reqFrame renderFrame
emptyStack
where traceEventCoord :: Event -> Fay ()
traceEventCoord e = do
eX <- pageX e
eY <- pageY e
let str = show eX ++ " x " ++ show eY
trace <- elById "trace"
elSetHtml trace str
pageX :: Event -> Fay Int
pageX = ffi "%1['pageX']"
pageY :: Event -> Fay Int
pageY = ffi "%1['pageY']"
main = do
docListener "DOMContentLoaded" $ \ _ -> do
putStrLn "DOM ready"
createTrace
createStack
listenMice
reqFrame renderFrame
最佳答案
参见 this answer了解声明数据类型的不同方式及其权衡。您是自己创建事件还是包装 DOM 事件?如果您要包装,我建议使用 EmptyDataDecl。这意味着您没有针对每种事件的构造函数,但您可以添加为您检查该类型的函数。如果您创建自己的事件,则使用带构造函数的普通数据声明更有意义。
当包装 DOM 事件时,您最终会得到:
data Event
pageX :: Event -> Fay Int
pageX = ffi "%1['pageX']"
Fay 有 Nullable 类型来处理可为 null 的值:
getElementById :: String -> Nullable Element
getElementById = ffi "document['getElementById'](%1)"
对此有更详细的描述 on the wiki
关于javascript - Fay、渲染循环和鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823763/
我想使用 Fay与 Yesod ,但无法让 Fay 进行类型检查。将不胜感激任何建议。 $ stack build
我想创建一个简单的聊天。 我不是服务器管理专家。 所以我有一个关于 ngnix 和 faye 的问题。 我使用 ngnix +passenger 作为我的生产服务器。我在 digitalocean 上
使用我们的主要应用程序在Passenger 和Faye on Thin 上进行部署目前正在工作。但是我在从那个设置过渡到 Faye 使用乘客时也遇到了一些问题。 它在这里建议( https://git
目前我正在使用 private_pub + faye 在 Rails 4 项目中进行一些基本的流式传输。 是否可以替换 faye 和 private_pub 并使用 Rails 4 流(服务器发送事件
我有 Rails 应用程序,并使用 apache 和 unicorn 部署在 AWS EC2 中。在此应用程序中,我将 faye 用于消息传递模块。它在 http 应用程序中运行良好,但在将 http
我正在使用 Yesod 脚手架网站(yesod 1.1.9.2),昨天花了几个小时研究 Fay 与 Yesod 的基本用法。我想我现在了解了使用 Fay 向页面添加一大块 AJAX 功能的预期工作流程
我正在尝试安装 fay但是 src 编译失败了 $ cabal install fay ... Preprocessing executable 'fay' for fay-0.10.1.0... [
我正在运行 ubuntu 13.10,但在安装 fay 时遇到问题。我使用 sudo apt-get install haskell-platform 安装了 haskell。我尝试 cabal in
序曲。我是 Haskell 和函数式编程的新手,但我忍不住用 Haskell 编码,因为它太令人兴奋了!因此,我的问题可能非常简单和/或微不足道。我仍在阅读“为您学习 Haskell 大有裨益”,而
我有一个带有 EventMachine、Fibers 和 faye 的简单脚本 require "faye" require "em-synchrony" require "hiredis" requ
我正在按照本教程进行操作: http://net.tutsplus.com/tutorials/ruby/how-to-use-faye-as-a-real-time-push-server-in-r
我正在考虑Faye对于一些实时发布/订阅到浏览器客户端。我找不到任何有关哪些浏览器可以与 Faye 配合使用的信息。 最佳答案 (免责声明:我是《Faye》的作者。) Faye 可在所有主要浏览器以及
我正在使用 faye 和 ruby 服务器进行发布订阅消息传递,它运行良好,但我有一些疑问: 我如何估计可以同时接收消息的最大客户端数量?它应该与我的消息大小相关,但我现在不知道如何衡量这个值。我
我正在尝试与工头一起开始 faye。我的 procfile 看起来像这样: web: bundle exec rails server thin -p $PORT -e $RACK_ENV worke
首选方法是什么?如何计算选择器选择的元素数量? 我能想到的一种方法是调用 JQuery 的 size: size :: JQuery -> Fay Int size = ffi "%1['size']
最近,我决定将一些 javascript 代码移植到 Fay,这样我就可以保证类型的正确性,这样我就可以以一种简洁的方式处理异步(也可以进行实验)。我构建了一些 javascript 对象,它们的唯一
我是 faye web socket 的新手,我尝试设置服务器和客户端来交换信息。不幸的是,我遗漏了一些东西,我无法在客户端上获取从服务器发送的消息。这是我的 server.js: var
如何开启Faye服务器的登录功能?我在打结: Faye::Logging.log_level = :debug Faye.logger = lambda { |m|放 m 我收到以下错误: /faye
我有一个在本地主机上运行的 faye 服务器 (nodejs),我正在尝试设置一个需要定期在服务器上发布的服务器端 ruby 客户端。这是我正在尝试使用的代码。(请忽略开头的注释代码)。 我创建了
我在我的 Rails 2.1 应用程序上使用 faye。在测试和修复许多问题之后,faye ruby client 无法正常工作。 这是我的服务器代码。 require 'faye' server
我是一名优秀的程序员,十分优秀!