1

いくつかのJavaScriptに取り組んでいます。カーソルの速度を計算するかなり良い関数を見つけました。問題は、コールバックではなく、実際の値を返したいことです。どうやってそれをしますか?

        function makeVelocityCalculator(e_init, callback) {
        var x = e_init.clientX,
            y = e_init.clientY,
            t = Date.now();
        return function(e) {
            var new_x = e.clientX,
                new_y = e.clientY,
                new_t = Date.now();
            var x_dist = new_x - x,
                y_dist = new_y - y,
                interval = new_t - t;
            // update values:
            x = new_x;
            y = new_y;
            t = new_t;
            var velocity = Math.sqrt(x_dist*x_dist+y_dist*y_dist)/interval;
            callback(velocity);
        };
    }
4

2 に答える 2

2

さて、その関数を「callback(velocity)」の代わりに速度を返すように変更します

Js フィドルのサンプル

または、意図したとおりに使用することもできます

makeVelocityCalculator(initialEvent, function(velocity) {
   console.log("velocity is", velocity);
});
is pretty much same as 
var velocity = makeVelocityCalculator(initialEvent);
console.log("velocity is", velocity);
于 2013-11-05T16:49:59.630 に答える
1
 function calculateVelocity(e_init) {
    var x = e_init.clientX,
        y = e_init.clientY,
        t = Date.now();
    return function(e) {
        var new_x = e.clientX,
            new_y = e.clientY,
            new_t = Date.now();
        var x_dist = new_x - x,
            y_dist = new_y - y,
            interval = new_t - t;
        // update values:
        x = new_x;
        y = new_y;
        t = new_t;
        var velocity = Math.sqrt(x_dist*x_dist+y_dist*y_dist)/interval;
        return velocity;
    };
}

var velocity = calculateVelocity(e_init)(e);
// OR
var v_f = calculateVelocity(e_init);
// then some code ...
v_f(e);

呼び出しで速度を返す場合は、すぐに呼び出す関数を使用します。それ以外の場合は関数を返します。関数は速度を返し(function(){})()ます。calculateVelocity

于 2013-11-05T16:49:50.233 に答える