質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.97%

【Javascript】clientX,Y が zoom 時にずれる

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,893

yuux01

score 32

<div style="zoom:0.5;"></div>

上記のように zoom を指定したボックスで clientX,Y を取得するとずれてしまうのですが、何とかならないでしょうか?

よろしくお願いいたします。

追記

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <link href="css/jquery-ui.min.css" rel="stylesheet" type="text/css" />
    <link href="css/jquery-ui.structure.min.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery-ui.min.js"></script>

    <script type="text/javascript" src="js/mascat.resizable.js"></script>
    <script type="text/javascript" src="js/mascat.draggable.js"></script>

    <style type="text/css">
    * {
        margin    : 0;
        padding: 0;
    }
    .Toolbar {
        height    : 1.5em;
    }
    .Drawing {
        height    : 1000px;
        width    : 100%;
        background-color: #CCDDFF;
        zoom    : 0.5;
    }
    .Axis {
        position: absolute;
    }
    .Axis.Horizontal {
        height    : 1px;
        width    : 100%;
        background-color: #000000;
    }
    .Axis.Vertical {
        height    : 100%;
        width    : 1px;
        background-color: #000000;
    }
    </style>
</head>
<body>
    <div class="Toolbar">
        <div>test</div>
    </div>
    <div class="Drawing">
        <div class="Axis Horizontal"></div>
        <div class="Axis Vertical"></div>
    </div>
    <script type="text/javascript">
        jQuery( document ).bind( 'mousemove', function ( evt ) {
            var pos = [ evt.clientX, evt.clientY ];

            jQuery( '.Drawing .Axis.Horizontal' ).css( 'top', pos[ 1 ] );
            jQuery( '.Drawing .Axis.Vertical' ).css( 'left', pos[ 0 ] );
        } );
    </script>
</body>
</html>

再現する最低限のコードです

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

-1

現象が再現する最小コードの提示
ターゲットブラウザの名前とバージョン
開発環境構成

zoom なので ie でしょうけど、質問の前提がありません。
現象が再現する最小コードとは、回答する人がコピペであなたと同じ不具合を確認するために必要です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/25 00:38

    CSS の zoom ですので、全ブラウザです。
    最新の物を使用しています。

    var pos = Mascat.Tools.clientToDrawing( [ evt.pageX, evt.pageY ] );

    clientToDrawing : function ( pos ) {
    var left = jQuery( '#DRAWING' ).get( 0 ).offsetLeft;
    var top = jQuery( '#DRAWING' ).get( 0 ).offsetTop;
    var p = jQuery( '#DRAWING' ).offset();
    var zoom = parseFloat( jQuery( '#DRAWING' ).css( 'zoom' ) );

    zoom = ( zoom >= 10 ? zoom / 100 : zoom );
    //zoom = ;

    console.log( jQuery( '#DRAWING' ).scrollLeft(), jQuery( '#DRAWING' ).scrollLeft() );

    pos[ 0 ] = pos[ 0 ] - p.left + jQuery( '#DRAWING' ).scrollLeft();
    pos[ 1 ] = pos[ 1 ] - p.top + jQuery( '#DRAWING' ).scrollTop();
    return pos;
    }

    修正しつつなので余分なコードが入ってます。

    jQuery( '#DRAWING .Axis.Vertical' ).css( { left : pos[ 0 ] } );
    jQuery( '#DRAWING .Axis.Horizontal' ).css( { top : pos[ 1 ] } );

    キャンセル

  • 2016/02/25 00:50 編集

    > CSS の zoom ですので、全ブラウザです。
    CSS の zoom は IE 由来の独自拡張で Firefox 未対応だったかと思います。
    http://caniuse.com/#feat=css-zoom
    http://caniuse.com/#search=transform

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる