2

Trickshot #29展示了如何在 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() {
})();

首先,但如果我能提供帮助,我真的不想在函数内部有函数内部的函数。

4

1 回答 1

1

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

据我所知,在您的情况下,这只是一个变量 -local但如果您添加了新变量,只需在函数定义和函数调用中添加一个新参数。

更新小提琴:http: //jsfiddle.net/ynUHb/1/

受影响的代码:

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);
    };
};

看:

于 2013-07-19T18:49:37.817 回答