javascript - 如何在 JavaScript 中展平 touchmove 监听器?

标签 javascript jquery

Trickshot #29展示了如何在 jQuery 中定义触摸事件。我在 this fiddle 中将其修改为我的流氓写作风格.

作者所做的是在触发 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 - 但如果您要添加新变量,只需在函数定义和函数调用中添加一个新参数即可。

更新 fiddle :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);
    };
};

参见:

关于javascript - 如何在 JavaScript 中展平 touchmove 监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17753210/

相关文章:

javascript - 解析: Add user to role using cloud code

jquery - 使用 jQuery 在文本区域中的光标位置创建工具提示

javascript - zend jquery ajax 输出与所选值相关的正确值

php - 复选框的 jquery 数组未发送到 php 文件

jquery - 从 GitHub README.md 文件 Markdown 到 HTML

javascript - 无法导入three.js glTF模型

php - 任何方法都可以知道页面是否是通过 AJAX 调用的

javascript - 单击后意外重复 ajax 调用

javascript - jqplot 当鼠标悬停在一行上时突出显示一条线

javascript - 以 jquery 形式序列化变量设置 jquery 延迟