一键在自己的网站上添加一只会动的小宠物

原创JYeontu前端也能这么有趣2024-01-0300:00发表于广东

组件实现效果如下图:

图片包我们可以通过以下几种方式来获取:

会作图的同学可以自己画一套专属的图片包。

我们从动图或视频中截取关键帧,并将获取到的关键帧背景扣除,这样我们也可以得到一套自己喜欢的图片包。

其实网上也有很多的桌宠图片包资源,所以我们可以直接到网上搜索。

由于本人美术不行且想偷懒,所以果断地选择了第3种方式来获取到了可以使用的图片资源。

获取到一套图片包之后,一套图片包中可能包含多个动作行为,所以我们还需要对其进行分类,将不同行为的图片分类出来,为了方便我们后续代码的编写,我们可以先将图片根据动作的顺序进行编号命名。

如上图划分的4中行为动作,我们都按顺序对图片进行编号命名,那么我们后续引用的时候就可以根据序号来定义一个行为动作,如下图:

图片准备好并且处理好之后,我们便可以开始编写代码了。

我们需要完成一个配置表来将图片和行为关联起来,如下图:

我们需要对每个图包的每个动作进行一个简单的配置:

图片包的路径。

没有进行任何行为的时候的默认展示图片。

行为集合,每个集合的配置如下:

name:该行为的名称,后面会在行为菜单展示;

min:行为开始图片编号;

max:行为结束图片编号;

isMove:该行为是否要发生位移;

audio:触发该行为时的音频。

具体如下:

{"name":"run","min":1,"max":2,"isMove":true,"audio":"Pikachu.mp3"},2、组件参数配置name选择展示的图片包,目前已有图片包:皮卡丘,奇犽,白一护,橘一护,喵老师,蓝染,迪达拉,日向雏田。

触发可移动行为时每一次移动的距离,默认为20px。

桌宠的尺寸大小,默认为50px。

初始化时默认触发的行为,可从行为菜单中选择。

props:{name:{type:String,default:"皮卡丘",},step:{type:Number,default:20,},petSize:{type:String,default:"50px",},defaultAction:{type:String,default:"",},},3、配置数据初始化我们需要根据传入的name来选择相对应的配置,图片我们要通过require的方式来引入,不能直接使用相对路径字符串。

importconfigfrom"./config.json";initData(){this.webPetConfig=config[this.name];this.actionList=this.webPetConfig.actionList;this.imgRootPath=this.webPetConfig.imgRootPath;this.imgSrc=require("@/assets/img/"+this.webPetConfig.defaultImg);this.uid="j-web-pet-"+getUId();constlist=this.actionList.map((item)=>{returnitem.name;})||[];this.menuList=list;clearTimeout(this.isRunToTarget);this.isRunToTarget=null;this.menuShow=false;}4、页面初始化根据传入参数及对应的配置来进行页面初始化。

init(){this.nowAction=this.actionList.find((item)=>{returnitem.name==this.defaultAction;})||{};this.showImg=document.getElementById("showImg");this.showImg.style.width=this.petSize;this.showImg.style.height=this.petSize;this.showImg.style.right=this.petSize;this.showImg.style.top="50%";this.showImg.style.transform="";this.mouseEventListen();this.autoRunToTarget();},5、行为菜单栏我们需要有个行为菜单栏来对宠物的行为进行切换,所以我们可以制作一个简易菜单展示,为了防止菜单栏溢出视图窗口,我们可以对其弹出位置进行以下限定:

菜单顶部与宠物的顶部对齐,如下图:

菜单底部与宠物中心对齐,如下图:

菜单从宠物右边弹出,如下图:

菜单从宠物左边弹出,如下图:

实现代码如下:

showMenu(){constw=this.showImg.offsetWidth;consth=this.showImg.offsetHeight;constleft=this.showImg.offsetLeft;consttop=this.showImg.offsetTop;constinnerWidth=window.innerWidth;constinnerHeight=window.innerHeight;constinLeft=left

playImg(action,ind){if(!action||JSON.stringify(action)=="{}")return;letmin=action.min,max=action.max;if(!ind||indmax){ind=min;}this.showImg&&this.showImg.setAttribute("src",require("@/assets/img/"+this.imgRootPath+ind+".png"));clearTimeout(this.isRunToTarget);this.isRunToTarget=setTimeout(()=>{this.playImg(action,ind+1);},500);},7、宠物移动效果实现移动效果我们只需要在图片切换的同时对图片的定位进行修改,便可以简单实现宠物移动的效果,所以我们需要计算每次移动的时候图片的坐标变化量及角度的偏移量。

转化成这么一道数学题之后是不是觉得简单多了?我们只需要解开这道简单的三角函数题目即可:

我们可以通过点A和点B的坐标来求边BC和边AC的长度:

AC=|X2-X1|BC=|Y2-Y1|知道了这两边的长度之后我们便可以求得角θ的度数了。

首先我们应该先了解一下反正切arctan,如果tanθ=y,我们可以得出arctan(y)=θ,所以我们可以通过反正切来求得角θ的大小

但是我们计算的时候两边的长度永远是正的,所以求得的角度区间应该是[0,π/2],所以在下面这种情况(目标点x坐标大于宠物x坐标)的时候,我们应该对其进行一个y轴镜像翻转。

转化成代码如下:

autoRunToTarget(action=this.nowAction,x="",y=""){if(action.isMove){if(!x)x=getRandomNum(0,window.innerWidth);if(!y)y=getRandomNum(0,window.innerHeight);this.runToTarget(action,action.min,x,y,()=>{this.autoRunToTarget(action);});}else{this.playImg(action);}},9、宠物拖动有的时候宠物可能会遮挡到页面内容,我们需要将其拖动移开,这里我们可以对鼠标移动事件和点击事件进行监听处理。

我们需要先点击宠物后使其进入可拖动状态才能开始拖动宠物。

clickPet(e){this.canDrag=true;//设置可拖动状态clearTimeout(this.isRunToTarget);this.startClickX=e.pageX-window.scrollX;this.startClickY=e.pageY-window.scrollY;window.addEventListener("mouseover",this.mouseoverHandler,false);window.addEventListener("mouseup",this.mouseupHandler,false);},2、根据鼠标坐标更新宠物坐标判断当前是否进入可拖动状态,可拖动时根据鼠标坐标更新宠物坐标。

mouseoverHandler(e){if(!this.canDrag)return;constw=this.showImg.offsetWidth/2;consth=this.showImg.offsetHeight/2;this.showImg.style.left=e.pageX-window.scrollX-w+"px";this.showImg.style.top=e.pageY-window.scrollY-h+"px";this.showImg.style.right="";this.showImg.style.bottom="";},3、区分点击事件和拖动事件鼠标抬起时判断是点击事件还是拖动事件,这里我使用拖拽开始位置和拖拽结束位置来做一个简单的判断,拖拽结束后注意清除鼠标的监听事件。

mouseupHandler(e){constendClickX=e.pageX-window.scrollX;constendClickY=e.pageY-window.scrollY;const{target}=e;if(target==this.showImg&&(Math.abs(this.startClickX-endClickX)<10||Math.abs(this.startClickY-endClickY)<10)){this.showMenu();}else{this.menuShow=false;this.autoRunToTarget();}this.canDrag=false;window.removeEventListener("mouseover",this.mouseoverHandler,false);window.removeEventListener("mouseup",this.mouseupHandler,false);},10、播放音频根据配置表获取当前行为的音频,有配对的音频则随机播放音频。

如有侵权,可以联系删除。

目前实现的只是一个简单组件版,后面会继续完善,增加更多的交互功能或交互小游戏,提高组件可配置性,后续还有两个改动方向:

有图片包资源的同学可以赞助下有什么其他好的建议也都可以提出来

当前组件已发布到npm,可以查看组件文档进行引入并配置。

引入后即可直接使用。

Gitee源码:/zheng_yongt…[3]

这里是JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球,平时也喜欢写些东西,既为自己记录,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解,写错的地方望指出,定会认真改进,在此谢谢大家的支持,我们下文再见。

THE END
1.html+css宠物网页设计网站模板源码分享U11BG 宠物狗(10页) ## 截图演示 #三、 作品代码 ## HTML代码 ```html <!doctype html> 宠迷网 宠迷网 登录 注册 https://www.jianshu.com/p/171278e09b09
2.ASP.NET宠物商店网页MyPetShop源代码宠物商店系统 ASP.net经典系统 上传者:wanghaiqiang时间:2007-08-17 ASP.NET实用网站开发(第3版)主教材源程序.zip ASP.NET实用网站开发(第3版)主教材源程序,包含Book ChapMyPetShop MyPetShop书上的三个源代码。 上传者:qq_36572829时间:2019-06-29 https://www.iteye.com/resource/qq_37652570-10149072
3.宠物店网站模板整站源码专业建站,就用米拓!宠物店响应式网站模板,网站排名更靠前,使用米拓企业建站系统轻松搞定电脑+平板+手机+微官网+小程序(微信、百度、支付宝、字节跳动、QQ、360)10合1企业官网,一键开通,会打字就会建网站!https://www.metinfo.cn/product/3412.html
4.石器E时代宠物宠物转身的原理(源代码分析)专业搬运这里有两个关键变量,一个是total1,一个是total2,从这段代码推测: total1 = PETTRANS_getPetBase( petindex1, work, &petrank); total2 = PETTRANS_getPetBase( petindex2, base, &petrank); total1和total2分别传入了petindex1,和petindex2.petindex不用说,都代表一个宠物的指针,也就是可以这个宠物...https://weibo.com/ttarticle/p/show?id=2309404546906390134874
5.观山湖区源和春宠物诊所(贵州省贵阳市观山湖区金阳北路2号金元...* 如何查询公司的行政区划代码? 付费查询 查老板:点击查看观山湖区源和春宠物诊所法人名下更多公司信息 查看企业风险:点击获取观山湖区源和春宠物诊所信息综合报告 了解企业详情:付费查询观山湖区源和春宠物诊所的企业法人、经营状态、注册资本、企业类型、登记日期、经营期限、企业地址、经营范围、股东信息、成员信息...https://gongshang.mingluji.com/guizhou/name/%E8%A7%82%E5%B1%B1%E6%B9%96%E5%8C%BA%E6%BA%90%E5%92%8C%E6%98%A5%E5%AE%A0%E7%89%A9%E8%AF%8A%E6%89%80
1.python毕设宠物服务平台程序+论文python毕设宠物服务平台程序+论文 本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。 系统程序文件列表 开题报告内容 一、选题背景 关于宠物服务平台的研究,现有研究多聚焦于宠物领养、寄养等单一服务类型为主,专门针对集多种宠物服务(如宠物医院、宠物医生、服务预约、...https://blog.csdn.net/sheji306/article/details/143697470
2.宠物狗交流网站怎么做源代码毕业论文- 资源描述:非常漂亮的狗狗源码,后台用户密码都是admin小狗源码网站更多下载资源、学习资料请访问CSDN下载频道. 狗狗-源码库|专注于网站源代码的下载站! 网站模板 2017-08-10 HTML5狗狗爱好者网站模板是一款橙色大气好看的宠物狗网站模板下载。... 7大世界上最贵的狗狗排行 2016-12-05 7大世界... ...https://cs-work.com/topic/x2v4oq
3.宠物狗主题官方网站源代码开发技术宠物狗主题官方网站源代码 开发技术 - Web开发〃A**离殇 上传6.63 MB 文件格式 rar 狗狗网站 狗狗源码 资源描述:非常漂亮的狗狗源码,后台用户密码都是admin 点赞(0) 踩踩(0) 反馈 所需:5 积分 电信网络下载 dayong1q 2019-05-01 23:20:19 评论 不错的资源...https://www.coder100.com/index/index/content/id/2300960
4.宠物网站页面设计代码,宠物网站模板源码这是17素材网小编精心准备的一款宠物网站页面设计代码,宠物网站模板源码,精美的页面设计布局,响应式设计模板,可以自定义编辑,欢迎大家下载并且使用。https://www.17sucai.com/pins/48543.html
5.宠物领养网站源码,专注收养表单HTML代码,简洁高效,仅输出关键文字...宠物领养网站源码,提供简洁高效的宠物收养表单html代码。用户可通过填写基本信息,轻松提交领养申请。我们致力于打造一个安全、便捷的宠物领养平台,让每只宠物都能找到温暖的家。 5.00点 演示地址查看 后台程序无后台 技术支持无 发布者°sunshine 有效期永久 https://www.moyublog.com/codes/24772.html
6.最代码最代码 www.zuidaima.com 最全面,最专业的源代码分享网站,近万名用户分享超过数万份高质量的java/jquery/bootstrap/html/css源代码https://zuidaima.com/
7.页游源码:明朝江湖online游戏源代码这次分享的又是页游源码,明朝江湖online源代码。 《明朝江湖》 是广州明朝信息技术有限公司研发的动作角色扮演网页游戏。 《明朝江湖》是首款养成类大型ARPG角色扮演网页游戏。游戏中融合了宠物养成,特色副本,PVE竞技,PVP对抗等玩法于一身。角色扮演类游戏,有着丰富的装备、宠物、升级、战斗等多重精彩功能,拥有丰富的历...https://www.022zxyy.com/615.html
8.查看“野兔(战斗宠物)”的源代码您可以查看和复制此页面的源代码。 {{战斗宠物信息栏 |BP_ID=448 |BP_Name_zh=野兔 |BP_Name_en=Hare |BP_IconID=254857 |BP_TypeID=5 |BP_CompanionID=61751 |BP_Source={{Text|#FFD200|宠物对战:}}阿拉希高地、杜隆塔尔、辛特兰 |BP_Description=一根胡萝卜、一个盒子、一根棍子和一些棉线。等上几...https://warcraft.huijiwiki.com/index.php?title=%E9%87%8E%E5%85%94%EF%BC%88%E6%88%98%E6%96%97%E5%AE%A0%E7%89%A9%EF%BC%89&action=edit
9.新版pbootcms模板宠物商店宠物网站源码宠物装备类网站PbootCMS内核开发的网站模板,该模板适用于宠物行业网站、宠物网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应,同一个后台,数据即时同步,简单适用!附带测试数据! 友好的seo,所有页面均都能完全自定义标题/关键词/描述,PHP程序,安全、稳定、快速;用低成本获取源源不断订单! https://m.eq.ah.cn/ah_24546.html
10.智能宠物防盗定位项圈硬件设计软件源代码,你的爱宠值得拥有!智能宠物防盗定位项圈,你的爱宠值得拥有!.pdf 描述:论文 [相关器件] S29GL01GS11DHB010 非易失性存储器,S29GL01GS - 1-Gbit (128 Mbyte), 3.0V, GL-S Flash Memory 数据手册 硬件设计 源代码 人工智能 点赞 1 条评论 分享 加入交流群 举报 ...https://www.eefocus.com/circuit/1059059.html
11.响应式宠物资讯类网站源码((自适应手机端))宠物博客经验pbootcms网站模...PbootCMS内核开发的网站模板,该模板适用于宠物资讯网站、宠物博客网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应,同一个后台,数据即时同步,简单适用!附带测试数据! 友好的seo,所有页面均都能完全自定义标题/关键词/描述,PHP程序,安全、稳定、快速;用低成本获取源源不断订单! https://www.jb51.net/codes/810955.html
12....cms响应式大气宠物食品动物网站模板HTML5猫粮狗粮网站源码...附带测试数据! 友好的seo,所有页面均都能完全自定义标题/关键词/描述,PHP程序,安全、稳定、快速;用低成本获取源源不断订单! 后台:域名/admin.php 账号:admin 密码:admin 模板特点 1:手工书写DIV+CSS、代码精简无冗余。 2:自适应结构,全球先进技术,高端视觉体验。https://www.0do.net/4311.html
13.韩国刺客帝国全套游戏源代码–资源分享网分享一款端游源码,热血传奇-韩国刺客帝国全套源代码 刺客第二代引擎全面更新,稳定、无错。 支持韩国新坐骑系统,宠物系统,钓鱼系统,羽化登仙,任务系统,变身系统,窗口化,好友,情人,邮件,四职业。 华丽的技能效果,支持韩国所有怪物攻击效果。同时还支持真彩。 https://www.ziyuan.tv/14623.html
14.开发源代码,为境内外赌博团伙提供产业支撑!91人被抓南方plus1月,从化区公安分局在日常网络巡查中发现,互联网上存在一个大型赌博网站,该网站内有大量代理人和会员进行线上投注。从化区公安分局对该线索进行深入侦查,经过逐层排查分析,发现一个以闫某为首,涉及赌博网站源代码开发和网站搭建,赌博在线客服定制、租用及运维,为境内团伙提供境外赌博网站数据接口服务,第四方支付通道技...https://static.nfapp.southcn.com/content/202104/30/c5197425.html
15.源飞宠物用品品牌介绍→源飞宠物玩具源飞宠物用品温州源飞宠物玩具制品股份有限公司 企业官网 http://www.wzyuanfei.com 企业电话 0577-59885723 企业邮箱 info@wzyuanfei.com 企业地址 浙江省 温州市 平阳县 水头镇标准园区宠乐路1号 品牌官网 工商信息 统一社会信用代码 91330326766445257X 注册资本 19089万元 成立日期 2004-09-27 登记状态 在营企...https://www.maigoo.com/brand/114845.html
16.专业的源码分享和技术分享网站源码有注释独家提供演示网站基于Spring+mybatis的SSM酒店餐厅点餐网站代码实现含演示站 这是一个SSM酒店餐厅点餐网站。有2个角色:食客角色和管理员角色,现在开始分角色介绍下功能。食客角色核心功能有食客登录,查看网站首页,查看菜品详情,加入购物车,提交订单信息,查看我的订单,发表留言。管理员角色核心功能有管理员登录...http://icodedock.com/
17.Steam上的侵入:源代码名称:侵入:源代码 类型:动作,冒险,独立,角色扮演 开发商:MaskCatStudio 发行商:MaskCatStudio 发行日期:2022 年 4 月 28 日 访问网站查看更新记录阅读相关新闻查看讨论查找社区组 嵌入 购买 侵入:源代码 ¥ 11.00 添加至购物车 关于这款游戏 《侵入:源代码》先遣队Q群:486394939 ...https://store.steampowered.com/app/1755740
18.高仿梦幻西游源代码(EM制作)高仿梦幻西游源代码(EM制作)-梦回西游源代码(EM)-合集成套 搜索 作者:hugosrnt文件总数:2268张下载:2972人 压缩包(2268张,71.8M) ...宠物状态 png459px 主程序/Dat/UI图标/UI头像 宠物状态 宠物资质 png454px 主程序/Dat/UI图标/UI头像 宠物资质 频道图标 / 528-1 ...https://www.aigei.com/view/63212.html