Rumah hujung hadapan web Tutorial H5 如何实时获取鼠标的当前坐标

如何实时获取鼠标的当前坐标

May 11, 2018 pm 02:18 PM
menyelaras dapatkan

本文来做一个简单的实时获取鼠标坐标的功能,在canvas动画开发中,获取鼠标的坐标,键盘的按键等等,都是常用的操作,我们就慢慢得把他们封装成一个公共库。

一、事件的兼容:

function bindEvent(obj, event, fn) {
        if (obj.attachEvent) { //ie
            obj.attachEvent('on' + event, function () {
                fn.call(obj);
            });
        } else {
            //chrome&ff
            obj.addEventListener(event, fn, false);
        }
    }
Salin selepas log masuk

上面兼容ie8以及修正this关键字在ie低版本的指向,下面兼容chrome和ff。其他更常用的封装可以参考我的javascript开源框架gdom

二、用立即表达式搭建一个基本的库

添加获取鼠标坐标的方法

;(function (window) {
    window.G = {};
    function bindEvent(obj, event, fn) {
        if (obj.attachEvent) { //ie
            obj.attachEvent('on' + event, function () {
                fn.call(obj);
            });
        } else {
            //chrome&ff
            obj.addEventListener(event, fn, false);
        }
    }

    G.getPos = function( dom ){
        var oPos = { x : 0, y : 0 };
        bindEvent( dom, 'mousemove', function( ev ){
            var oEvent = ev || event, x, y;
            if ( oEvent.pageX || oEvent.pageY ){
                x = oEvent.pageX;
                y = oEvent.pageY;
            }else {
                x = oEvent.clientX + document.body.scrollLeft || document.documentElement.scrollLeft;
                y = oEvent.clientX + document.body.scrollTop || document.documentElement.scrollTop;
            }
            x -= dom.offsetLeft;
            y -= dom.offsetTop;
            oPos.x = x;
            oPos.y = y;
        } );
        return oPos;
    };

})(window);
Salin selepas log masuk

三、引入封装的js库,绑定canvas为监听对象,打印当前鼠标的坐标

鼠标的坐标,我这里画了2根线,便于观察.

<head>
<meta charset='utf-8' />
<script>
;(function (window) {
    window.G = {};
    function bindEvent(obj, event, fn) {
        if (obj.attachEvent) { //ie
            obj.attachEvent(&#39;on&#39; + event, function () {
                fn.call(obj);
            });
        } else {
            //chrome&amp;ff
            obj.addEventListener(event, fn, false);
        }
    }

    G.getPos = function( dom ){
        var oPos = { x : 0, y : 0 };
        bindEvent( dom, 'mousemove', function( ev ){
            var oEvent = ev || event, x, y;
            if ( oEvent.pageX || oEvent.pageY ){
                x = oEvent.pageX;
                y = oEvent.pageY;
            }else {
                x = oEvent.clientX + document.body.scrollLeft || document.documentElement.scrollLeft;
                y = oEvent.clientX + document.body.scrollTop || document.documentElement.scrollTop;
            }
            x -= dom.offsetLeft;
            y -= dom.offsetTop;
            oPos.x = x;
            oPos.y = y;
        } );
        return oPos;
    };

})(window);
</script>
<style>
#canvas{
    border:1px dashed #aaa;
}
</style>
<script>
window.onload = function(){
    var oCanvas = document.querySelector( "#canvas" ),
        oGc = oCanvas.getContext( '2d' ),
        width = oCanvas.width, height = oCanvas.height,
        oInfo = document.querySelector( "#info" ),
        oPos = G.getPos( oCanvas );
        oCanvas.addEventListener( "mousemove", function(){
            
            oGc.clearRect( 0, 0, width, height );
            oGc.beginPath();
            oGc.moveTo( oPos.x, 0 );
            oGc.lineTo( oPos.x, height );
            oGc.moveTo( 0, oPos.y );
            oGc.lineTo( width, oPos.y );
            oGc.closePath();
            oGc.strokeStyle = '#09f';
            oGc.stroke();

            oInfo.innerHTML = '鼠标的当前坐标是:(' + oPos.x + ',' + oPos.y + ')';
        }, false );
}
</script>
</head>
<body>
<canvas id="canvas" width="500" height="400"></canvas>
<p id="info"></p>
</body>
Salin selepas log masuk

Atas ialah kandungan terperinci 如何实时获取鼠标的当前坐标 . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mendapatkan sambungan fail dalam Python? Bagaimana untuk mendapatkan sambungan fail dalam Python? Sep 08, 2023 pm 01:53 PM

Bagaimana untuk mendapatkan sambungan fail dalam Python?

Di mana untuk mendapatkan kod keselamatan Google Di mana untuk mendapatkan kod keselamatan Google Mar 30, 2024 am 11:11 AM

Di mana untuk mendapatkan kod keselamatan Google

Gunakan fungsi math.Max ​​untuk mendapatkan nilai maksimum dalam set nombor Gunakan fungsi math.Max ​​untuk mendapatkan nilai maksimum dalam set nombor Jul 24, 2023 pm 01:24 PM

Gunakan fungsi math.Max ​​untuk mendapatkan nilai maksimum dalam set nombor

Bagaimana untuk mendapatkan elemen terakhir LinkedHashSet di Java? Bagaimana untuk mendapatkan elemen terakhir LinkedHashSet di Java? Aug 27, 2023 pm 08:45 PM

Bagaimana untuk mendapatkan elemen terakhir LinkedHashSet di Java?

Program Java untuk mendapatkan saiz fail yang diberikan dalam bait, kilobait dan megabait Program Java untuk mendapatkan saiz fail yang diberikan dalam bait, kilobait dan megabait Sep 06, 2023 am 10:13 AM

Program Java untuk mendapatkan saiz fail yang diberikan dalam bait, kilobait dan megabait

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP

Bagaimana untuk memasang dua kad SIM pada Realme 12 Pro? Bagaimana untuk memasang dua kad SIM pada Realme 12 Pro? Mar 18, 2024 pm 02:10 PM

Bagaimana untuk memasang dua kad SIM pada Realme 12 Pro?

Dapatkan kemas kini terkini sekarang: Betulkan kemas kini terkini yang tiada Dapatkan kemas kini terkini sekarang: Betulkan kemas kini terkini yang tiada Nov 08, 2023 pm 02:25 PM

Dapatkan kemas kini terkini sekarang: Betulkan kemas kini terkini yang tiada

See all articles