0

jQueryアニメーション中にマウス座標を取得しようとしていますが、私は対話型プラグインを使用しています。 a divcover cssプロパティから100%までユーザーが要素を移動したときのスケールです。jQueryアニメーションのすべてのステップでマウス座標を取得する

plug-inを完了するのに近いですが、アニメーションはバグです。マウスの最後の位置で動作するため、mousemove jQueryのイベントで発生します。

問題を回避する方法はありますか?

これが私の状況です:

$(settings.selector).hover(function (e) { 
    $(this).bind('mousemove', setFollowMouse); 
}, function() { 
    $(this).unbind('mousemove', setFollowMouse); 
    zoomOut(); 
}); 

var setFollowMouse = function (e) { 
    var o = {offsetLeft:this.offsetLeft, offsetTop:this.offsetTop}; 
    if (!settings.bg.zooming_in && settings.bg.current_scale != 100) { 
    settings.bg.zooming_in = true; 
    zoomIn(e, o); 
    } else { 
     followMouse(e, o); 
    } 
} 

var zoomIn = function (e, o) { 

    $({scale:settings.bg.min_perc}).animate ({ 
     scale:100 
    },{ 
     easing:settings.zoom_in.easing, 
     duration:settings.zoom_in.duration, 
     step:function() { 
      settings.bg.current_scale = this.scale; 
      followMouse(e, o); 
     }, 
     complete:function() { 
      settings.bg.current_scale = 100; 
      settings.bg.zooming_in = false; 
      followMouse(e, o); 
     } 
    }); 
} 

var followMouse = function (e, o) { 

    var m_x = e.pageX - o.offsetLeft; 
    var m_y = e.pageY - o.offsetTop; 

    settings.bg.perc_pos_x = ((m_x * 100)/(a_w - bg_w)) + '%'; 
    settings.bg.perc_pos_y = ((m_y * 100)/(a_h - bg_h)) + '%'; 

    var bg_w = getScalePercent(settings.bg.width, settings.bg.current_scale); 
    var a_w = settings.container.width; 

    var bg_h = getScalePercent(settings.bg.height, settings.bg.current_scale); 
    var a_h = settings.container.height; 

    var bpx = - (bg_w - a_w) * m_x/a_w; 
    var bpy = - (bg_h - a_h) * m_y/a_h; 

    $(settings.selector).css({ 
     backgroundPosition:bpx + 'px ' + bpy + 'px' 
     ,backgroundSize:bg_w + 'px ' + bg_h + 'px' 
    }); 
} 

見ての通り、私は背景画像の漸進的なスケーリングを計算するためにアニメーションを使用し、フォローマウス方法でそれを計算しようと、私は移動STO場合マウスは、最後のmousemoveevent.pageXYマウス位置で動作します。

これはマウスで連続的に書き直すとアニメーションメソッドの作成に問題があるため、これを実行しました。

バグを避けるために別の方法を実行する必要がありますか?

答えて

0

var setFollowMouse = function (e) { 

    var o = {offsetLeft:this.offsetLeft, offsetTop:this.offsetTop}; 

    if (!settings.bg.zooming_in && settings.bg.current_scale != 100) { 
     settings.bg.zooming_in = true; 
     zoomIn(e, o); 
    } else { 
     followMouse(e, o); 
    } 
} 

これはバグのある行動を削除しています。

0

私の厄介な数学を許してください。しかしこれは助けになるはずです!

var setFollowMouse = function (e) { 

    settings.mouse.x = e.pageX - this.offsetLeft; 
    settings.mouse.y = e.pageY - this.offsetTop; 

    if (!settings.bg.zooming_in && settings.bg.current_scale != 100) { 
     settings.bg.zooming_in = true; 
     zoomIn(); 
    } else { 
     followMouse(); 
    } 
} 

古い1::私はちょうど私のコードには、この簡単な編集で問題を解決してきました

<html> 
    <head> 
     <script type="text/javascript" charset="utf-8"> 
      window.onload = function() { 
       var img = new Image(); 
       img.src = 'http://wallpapers.free-review.net/wallpapers/23/Autumn_Theme_-_Windows_7_Backgrounds.jpg'; 

       var canvas = document.getElementById("canvas1"); 
       canvas.width = img.width; 
       canvas.height = img.height; 
       canvas.addEventListener('mousemove', onMouseMove, false); 

       var ctx = canvas.getContext("2d"); 
       var scale = 0.9; 

       var scaledwidth = canvas.width * scale; 
       var scaledheight = canvas.height * scale; 

       var scaledcenterX = scaledwidth /2; 
       var scaledcenterY = scaledheight /2; 

       var animloop = setInterval(function() { 
        ctx.clearRect(0, 0, canvas.width, canvas.height); 
        ctx.drawImage(img, scaledwidth, scaledheight, canvas.width - scaledcenterX, canvas.height - scaledcenterY, 0, 0, canvas.width, canvas.height); 
       }, .01); 

       function onMouseMove(e) { 
        mouseX = e.clientX - canvas.offsetLeft; 
        mouseY = e.clientY - canvas.offsetTop; 
        scale = mouseX/1000; 
        scaledwidth = canvas.width * scale; 
        scaledheight = canvas.height * scale;      
       } 

      }; 

     </script> 
     <style> 
      body { 
       background: #001; 
       background-size: cover; 
       overflow: hidden; 
      } 
      #canvas1 { 
       position: absolute; 
       top: 0; 
       left: 0; 
       padding: 0; 
       margin: 0; 
       height: 100% auto; 
      } 
     </style> 
    </head> 
    <body> 
     <canvas id="canvas1"></canvas> 
    </body> 
</html> 
+0

私は本当にキャンバスで作業したいと思っています。今は終わったので、私が始めた 'jQueryプラグイン'のパスを完成させることをお勧めします! – vitto

関連する問題