如何在JavaScript中展平touchmove侦听器?

如何在JavaScript中展平touchmove侦听器?,javascript,jquery,Javascript,Jquery,显示如何在jQuery中定义触摸事件。我把它改成了我的流氓写作风格 作者所做的是在触发touchstart事件时定义touchmove侦听器 request.dom.ball.on('mousedown touchstart',myTouchStart); function myTouchStart(myEvent){ request.dom.ball.on('mousemove.myNameSpace touchmove.myNameSpace',myTouchMove); fun

显示如何在jQuery中定义触摸事件。我把它改成了我的流氓写作风格

作者所做的是在触发touchstart事件时定义touchmove侦听器

request.dom.ball.on('mousedown touchstart',myTouchStart);
function myTouchStart(myEvent){
   request.dom.ball.on('mousemove.myNameSpace touchmove.myNameSpace',myTouchMove);
   function myTouchMove(myEvent) {
我想做的是将myTouchMove放在myTouchStart之外,因为我的流氓JavaScript编写风格是尽量使其保持平面,如果我能帮助的话,不要在函数中包含函数

这可能看起来很奇怪,因为我已经把所有东西都包在里面了:

(function() {
})();

首先,如果可以的话,我真的不想让函数中的函数包含函数中的函数。

一种方法是从另一个函数(称为闭包)返回内部函数,该函数将传递最初引用到原始函数的任何变量

据我所知,在你的例子中只有一个变量-
local
,但是如果你添加了新变量,只需在函数定义和函数调用中添加一个新参数即可

更新小提琴:

受影响的代码:

request.dom.ball.on('mousedown touchstart',myTouchStart);

function myTouchStart(myEvent){
    var local = {};
    //...
    request.dom.ball.on('mousemove.myNameSpace touchmove.myNameSpace',myTouchMove(local));
    //...
};

function myTouchMove(local) {
    return function(myEvent) {
        var myCss = {};

        myEvent = (myEvent.originalEvent.touches) ? myEvent.originalEvent.touches[0] : myEvent;
        myCss.top = local.elementPosition.y + myEvent.pageY - local.startPosition.y;
        request.dom.top.text(myCss.top);
        myCss.left = local.elementPosition.x + myEvent.pageX - local.startPosition.x;
        request.dom.left.text(myCss.left);
        request.dom.ball.css(myCss);
    };
};
请参见:


您可以在
touchstart
功能之外定义该功能。您只需将其附加到函数内部即可。谢谢@kalley。你的想法和Ma3x一样吗?将myTouchMove定义为闭包?这很有效。然后我可以将“myCss”重命名为“local”,因为我的风格是将函数的所有局部变量放在一个“local”变量中。这意味着我需要将myTouchMove(local)重命名为类似myTouchMove(arg)的名称。@Phillip:可能吧,但我需要查看代码才能确定。只需确保将当前名为
local
的变量重命名为不同的名称,因为该变量现在正在函数中使用。@Phillip:您正在使用变量
myCss
调用
request.dom.ball.css(myCss)所以你不应该删除它。可能将其添加到
local.myCss={}
中,然后将所有
myCss
替换为
local.myCss
,如果这是您的风格的话。