分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

[js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标

发布时间:2023-09-06 01:14责任编辑:顾先生关键词:js动画

有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下:

[js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法

[js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API

[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解

[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)

[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)

[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)

[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)

[js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)

[js高手之路] html5 canvas系列教程 - 状态详解(save与restore)

[js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)

[js高手之路] html5 canvas系列教程 - 线形渐变,径向渐变与阴影设置

[js高手之路] html5新增的定时器requestAnimationFrame实战进度条

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

一、事件的兼容:

 1 function bindEvent(obj, event, fn) { 2 ????????if (obj.attachEvent) { //ie 3 ????????????obj.attachEvent(‘on‘ + event, function () { 4 ????????????????fn.call(obj); 5 ????????????}); 6 ????????} else { 7 ????????????//chrome&ff 8 ????????????obj.addEventListener(event, fn, false); 9 ????????}10 ????}

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

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

添加获取鼠标坐标的方法

 1 ;(function (window) { 2 ????window.G = {}; 3 ????function bindEvent(obj, event, fn) { 4 ????????if (obj.attachEvent) { //ie 5 ????????????obj.attachEvent(‘on‘ + event, function () { 6 ????????????????fn.call(obj); 7 ????????????}); 8 ????????} else { 9 ????????????//chrome&ff10 ????????????obj.addEventListener(event, fn, false);11 ????????}12 ????}13 14 ????G.getPos = function( dom ){15 ????????var oPos = { x : 0, y : 0 };16 ????????bindEvent( dom, ‘mousemove‘, function( ev ){17 ????????????var oEvent = ev || event, x, y;18 ????????????if ( oEvent.pageX || oEvent.pageY ){19 ????????????????x = oEvent.pageX;20 ????????????????y = oEvent.pageY;21 ????????????}else {22 ????????????????x = oEvent.clientX + document.body.scrollLeft || document.documentElement.scrollLeft;23 ????????????????y = oEvent.clientX + document.body.scrollTop || document.documentElement.scrollTop;24 ????????????}25 ????????????x -= dom.offsetLeft;26 ????????????y -= dom.offsetTop;27 ????????????oPos.x = x;28 ????????????oPos.y = y;29 ????????} );30 ????????return oPos;31 ????};32 33 })(window);

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

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

 1 <head> 2 <meta charset=‘utf-8‘ /> 3 <script> 4 ;(function (window) { 5 ????window.G = {}; 6 ????function bindEvent(obj, event, fn) { 7 ????????if (obj.attachEvent) { //ie 8 ????????????obj.attachEvent(‘on‘ + event, function () { 9 ????????????????fn.call(obj);10 ????????????});11 ????????} else {12 ????????????//chrome&ff13 ????????????obj.addEventListener(event, fn, false);14 ????????}15 ????}16 17 ????G.getPos = function( dom ){18 ????????var oPos = { x : 0, y : 0 };19 ????????bindEvent( dom, ‘mousemove‘, function( ev ){20 ????????????var oEvent = ev || event, x, y;21 ????????????if ( oEvent.pageX || oEvent.pageY ){22 ????????????????x = oEvent.pageX;23 ????????????????y = oEvent.pageY;24 ????????????}else {25 ????????????????x = oEvent.clientX + document.body.scrollLeft || document.documentElement.scrollLeft;26 ????????????????y = oEvent.clientX + document.body.scrollTop || document.documentElement.scrollTop;27 ????????????}28 ????????????x -= dom.offsetLeft;29 ????????????y -= dom.offsetTop;30 ????????????oPos.x = x;31 ????????????oPos.y = y;32 ????????} );33 ????????return oPos;34 ????};35 36 })(window);37 </script>38 <style>39 #canvas{40 ????border:1px dashed #aaa;41 }42 </style>43 <script>44 window.onload = function(){45 ????var oCanvas = document.querySelector( "#canvas" ),46 ????????oGc = oCanvas.getContext( ‘2d‘ ),47 ????????width = oCanvas.width, height = oCanvas.height,48 ????????oInfo = document.querySelector( "#info" ),49 ????????oPos = G.getPos( oCanvas );50 ????????oCanvas.addEventListener( "mousemove", function(){51 ????????????52 ????????????oGc.clearRect( 0, 0, width, height );53 ????????????oGc.beginPath();54 ????????????oGc.moveTo( oPos.x, 0 );55 ????????????oGc.lineTo( oPos.x, height );56 ????????????oGc.moveTo( 0, oPos.y );57 ????????????oGc.lineTo( width, oPos.y );58 ????????????oGc.closePath();59 ????????????oGc.strokeStyle = ‘#09f‘;60 ????????????oGc.stroke();61 62 ????????????oInfo.innerHTML = ‘鼠标的当前坐标是:(‘ + oPos.x + ‘,‘ + oPos.y + ‘)‘;63 ????????}, false );64 }65 </script>66 </head>67 <body>68 <canvas id="canvas" width="500" height="400"></canvas>69 <div id="info"></div>70 </body>

四、点击‘run code‘可以预览效果额


??????? ???

[js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标

原文地址:http://www.cnblogs.com/ghostwu/p/7613749.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved