44

処理などの他のプログラミング言語には、数値の範囲内の数値を別の範囲内の数値に変換できる機能があります。私がやりたいのは、マウスのX座標をたとえば0から15の範囲に変換することです。したがって、ブラウザのウィンドウのサイズは、ユーザーごとに異なりますが、たとえば幅1394ピクセル、現在のX座標は563ピクセルになります。 、そしてそれを0から15の範囲に変換したいと思います。

この機能が組み込まれているjqueryとjavascriptの関数を見つけたいと思っています。これを行うための数学は自分で理解できますが、もっと簡潔で動的な方法でこれを行いたいと思います。

私はすでにこのコードで画面の寸法とマウスの寸法をキャプチャしています:

var $window = $(window);
var $document = $(document);


$document.ready(function() {
    var mouseX, mouseY; //capture current mouse coordinates
    var screenW, screenH; //capture the current width and height of the window
    var maxMove = 10;
    windowSize();

    $document.mousemove( function(e) {
        mouseX = e.pageX; 
        mouseY = e.pageY;

    });

    $window.resize(function() {
        windowSize();
    });

    function windowSize(){
        screenW = $window.width();
        screenH = $window.height();
    }

});

あなたが提供できるどんな助けにも感謝します。

4

9 に答える 9

8

範囲が常に0から始まる場合、あなたがしなければならないことは

mouseValue * range.max / screen.max

より複雑な任意の範囲から任意の範囲への変換には、

function convertToRange(value, srcRange, dstRange){
  // value is outside source range return
  if (value < srcRange[0] || value > srcRange[1]){
    return NaN; 
  }

  var srcMax = srcRange[1] - srcRange[0],
      dstMax = dstRange[1] - dstRange[0],
      adjValue = value - srcRange[0];

  return (adjValue * dstMax / srcMax) + dstRange[0];

}

のように使うconvertToRange(20,[10,50],[5,10]);

于 2012-05-25T14:40:13.243 に答える
4

OPが要求した汎用マッピング機能については、次の場所にアクセスしてください。

http://rosettacode.org/wiki/Map_range#JavaScript

于 2013-11-06T09:29:46.847 に答える
1

これは簡単な数学です。

var screenWidth = $(window).width();
var mousePosition = e.pageX;
var max = 15;
var value = (mousePosition / screenWidth) * max;

これは 10 進数を返す可能性があることに注意してください。それを望まない場合はMath.round、結果に使用できます。

実際の例

于 2012-05-25T14:39:01.230 に答える
1
function proportion(value,max,minrange,maxrange) {
    return Math.round(((max-value)/(max))*(maxrange-minrange))+minrange;
}

あなたの場合、これを次のように使用しますproportion(screencoord,screensize,0,15)

また、画面サイズはモニターの最大サイズを指し、すべてのユーザーが画面を最大化するわけではないため、画面サイズではなくクライアント サイズを取得する必要があると思われます。

于 2012-05-25T14:42:17.530 に答える
1

6 つの変数があるとします。

  • minRange (例では 0)
  • maxRange (この例では 15)
  • バツ
  • y
  • ブラウザの幅
  • ブラウザの高さ

範囲を持つには:

interval = maxRange - minRange;
rangeX = interval * x / browserWidth + minRange
rangeY = interval * y / browserHeight + minRange
于 2012-05-25T14:45:03.397 に答える
0

私は August Miller のアイデアを採用し、それらに制限を追加しました (値は in_min と in_max の範囲を超えることはできず、その場合はそれぞれ out_min と out_max を返します)、スクリプトにコピー ペースト機能が必要な人のために縮小しました:

function map(n,i,o,r,t){return i>o?i>n?(n-i)*(t-r)/(o-i)+r:r:o>i?o>n?(n-i)*(t-r)/(o-i)+r:t:void 0}

params は map(value, in_min, in_max, out_in, out_max) のようなものです

于 2016-09-08T23:36:06.217 に答える