JS编写鼠标操作

2023-10-31

通过上一篇博文《JS编写键盘操作&禁用键盘》,我们可以用键盘的方向键来操控动画人物行走。光用键盘操作还不过瘾?那就再加一个鼠标操作吧。鼠标操作的目标有两个:1、可以抓取动画人物并移动;2、单击鼠标左键,让动画人物上下左右行走。先来实现第一个目标,代码如下:

function mouse_ctrl(){ //鼠标控制
var obj=document.getElementById("ai");
document.onmousedown=function(ev){ //定位人物
var event=ev||window.event;
x=event.x;
y=event.y;
x0=obj.offsetLeft;
y0=obj.offsetTop;
xt=x-x0;
yt=y-y0;
if(xt<64 && yt<64 && yt>=0 && xt>=0){ //鼠标在人物范围内
document.onmousemove=move; //定义鼠标移动时的操作
document.onmouseup=release; //定义手指离开鼠标左键时的操作
}
else{ //鼠标超出人物范围
mouse_direct(); //单击左键时的人物位移函数
}
}
}

如上代码,要捕获动画人物,需要用到document.onmousedown,要实现动画人物的移动,则要用到document.onmousemove,要结束动画人物随鼠标移动,则要用到document.onmouseup。另外,if语句是用来判断单击鼠标时是否正好在动画人物范围内?若是在范围之外,则会启动让动画人物走动的指令。

鼠标移动动画人物的代码如下:

function move(){ //鼠标移动人物
var obj=document.getElementById("ai");
var event=event||window.event;
x1=event.x-(x-x0);
y1=event.y-(y-y0);
obj.style.left=x1+"px";
obj.style.top=y1+"px";
}

请注意,如果动画人物本身是在行走的情况下移动它,整个过程动画人物还是走动状态,可以在上述代码添加stop()函数(参看《JS编写人物行走动画》一文),若要限制动画人物不出浏览器框架范围,则还需要限制x1和y1的最大最小坐标范围。

释放鼠标移动的代码如下:

function release(){ //释放鼠标移动
var obj=document.getElementById("ai");
var event=event||window.event;
document.onmousemove=document.onmouseup=null;
}

如果动画人物本身是在行走的状态下被鼠标捕获移动,释放后想要保持继续行走的状态,就需要计算下未走完的距离,再调用walk(_direct,_step)函数实现继续行走。

至此,鼠标操作的第一个目标达成。第二个目标的实现其实就是计算鼠标点击处和动画人物所在距离,然后转换成行走的步数以及相对方向。代码如下:

function mouse_direct(){ //根据鼠标位置选择移动方向
if(yt<=64 && xt>=64 && yt>=0){ //右
num=0;
step=Math.abs(xt/25);
}
else if(yt<=64 && xt<0 && yt>=0){ //左
num=1;
step=Math.abs(xt/25);
}
else if(yt>=64 && xt<=64 && xt>=0){ //下
num=2;
step=Math.abs(yt/25);
}
else if(yt<0 && xt<=64 && xt>=0){ //上
num=3;
step=Math.abs(yt/25);
}
walk(num,step);
}

JS编写并操控人物行走动画至此告一段落,喜欢这三篇博文的,请记得给我点赞哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS编写鼠标操作 的相关文章

随机推荐

  • Matlab绘图?学会一招就够了——源代码

    hello 欢迎来到我的博客 你应该是b站来的小伙伴吧 谢谢你的关注 这篇博客的内容是以下这个视频的源代码 Matlab绘图 学会一招就够了 代码如下 clc clear all close all 生成图窗 clc 清楚command窗口
  • 双向卷积神经网络_基于双向特征融合卷积神经网络的液晶面板缺陷检测算法

    基于双向特征融合卷积神经网络的液晶面板缺陷检测算法 彭大芹 刘恒 许国良 邓柯 摘 要 摘要 针对手机液晶面板生产工业中缺陷检测面临的精度低的问题 提 出了一种基于深度学习的液晶面板缺陷检测算法 该算法在传统单向特征融合 的基础上提出了双向
  • Windows上运行Caffe自带的mnist例子

    环境要求 win10 VS2013 CUDA7 5 Caffe的windows版下载地址 https github com Microsoft caffe 配置Caffe工程 1 将Caffe源码的windows目录下CommonSetti
  • 第十三届蓝桥杯大赛软件赛决赛(Java 大学A组)

    蓝桥杯 2022年国赛真题 Java 大学A组 试题 A 火柴棒数字 试题 B 小蓝与钥匙 试题 C 内存空间 试题 D 斐波那契数组 试题 E 交通信号 试题 F 数组个数 试题 G 六六大顺 试题 H 选素数 试题 I 图书借阅 试题
  • GFS浅谈

    GFS Google File System Big Table Map Reduce作为google的三宝技术 是Google诸多服务的基石 我想就自己的理解对GFS文件系统作一个分析 GFS首先是属于分布文件系统 但作为Google公司
  • PAT C入门题目练习-7-90 螺旋方阵 (20 分)

    7 90 螺旋方阵 20 分 所谓 螺旋方阵 是指对任意给定的N 将1到N N的数字从左上角第1个格子开始 按顺时针螺旋方向顺序填入N N的方阵里 本题要求构造这样的螺旋方阵 输入格式 输入在一行中给出一个正整数N lt 10 输出格式 输
  • C#中的一些基本方式总结

    目录 1 委托delegate c 中的将方法作为参数传递 2 堆和栈 3 override重写 4 new关键字 如果子类声明了和父类同样的方法 但用new声明了 会隐藏掉父类的方法 5this和base 6 sealed类 7 泛型方法
  • python中的sort排序_python的sort()怎么排序

    python中的sort 函数只能应用在列表list上 而sorted可以对所有可迭代的对象进行排序的操作 sort方法会在原list上直接进行排序 不会创建新的list 而sorted方法不会对原来的数据做任何改动 排序后的结果是新生成的
  • JavaSE + bluecove 蓝牙连接

    最近公司准备将旧系统的 NET部分翻版 项目除了有后台的还有个与设备对接的客户端用蓝牙连接的 所有这周对相关技术做了一个验证 搜了一下Java 蓝牙相关信息 我去资料也太少了 少也就算了连bluecove库也是有问题的 经过艰难的查找 最终
  • 内核编译出错 [arch/arm/boot/compressed/piggy.lzo] Error 1

    项目场景 linux4 x 内核编译出现错误 问题现象 编译打印输出 arch arm boot compressed Makefile 180 recipe for target arch arm boot compressed pigg
  • RabbitMQ解决消息幂等性问题

    前言 关于MQ消费者的幂等性问题 在于MQ的重试机制 因为网络原因或客户端延迟消费导致重复消费 使用MQ重试机制需要注意的事项以及如何解决消费者幂等性问题以下将逐一讲解 1 RabbitMQ自动重试机制 消费者在消费消息的时候 如果消费者业
  • tensorflow serving部署keras或tf2.0模型

    一 安装docker 由于apt官方库里的docker版本可能比较旧 所以先卸载可能存在的旧版本 sudo apt get remove docker docker engine docker ce docker io 更新apt包索引 s
  • 51单片机 数码管操作

    静态数码管 include
  • 微信oauth2网页授权code过期

    最近开发微信客户端项目时遇到code返回码请求两次 导致获取openid失败的情况 特此一记帮助看到的同学节约一点点的时间 引用微信文档的一段说明 详细参考点击 用户同意授权 获取code 在确保微信公众账号拥有授权作用域 scope参数
  • HBuilder 上传项目到Gitee 但是gitee修改了密码怎么办

    HBuilder 上传项目到Gitee 但是gitee修改了密码怎么办 选中要上传的项目 点击鼠标右键 选择Git同步 在弹出的框中 点击Manage 找到saved Data 这个选项 授权数据 点击Clear 当我们再次pull 或者
  • C++(十五)之类的分文件编写

    今天我们来学习一下类的分文件编写 在我们平时的项目中 很少有一个文件完成的 即使有 那么这个文件也会很长 看上去结构就不会那么清晰 所以我们今天用一个简单的例子 来说明一下如何使用分文件编写的方式 来完成一个简单的项目 我们使用的例子是在平
  • 如何计算网络地址和广播地址

    IP地址10 145 129 20 掩码255 255 248 0 网络地址和广播地址怎么计算 key 网络地址 10 145 128 0 广播地址 10 145 135 255 IP转换成二进制 00001010 10010001 100
  • vue3项目中 全局引入element和自定义主题;按需引入element和自定义主题

    首先安装 npm install D sass npm install element plus save 在项目中全局引入element plus 在main js文件中引入 import ElementPlus from element
  • 3、Nginx 常用的命令和配置文件

    文章目录 3 nginx 常用的命令和配置文件 3 1 nginx 常用的命令 3 2 nginx conf 配置文件 3 2 1 地址 3 2 2 内容 3 2 2 vim不正常退出后再次打开信息提示解决方法 3 3 第一部分 全局块 3
  • JS编写鼠标操作

    通过上一篇博文 JS编写键盘操作 禁用键盘 我们可以用键盘的方向键来操控动画人物行走 光用键盘操作还不过瘾 那就再加一个鼠标操作吧 鼠标操作的目标有两个 1 可以抓取动画人物并移动 2 单击鼠标左键 让动画人物上下左右行走 先来实现第一个目