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

原创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.PetShop4.0源码解读1. PetShop4.0是微软基于.net 2.0开发的一个实例教程,它如同课本中的例题,指引着开发者如何通过asp.net 2.0 创建一个中小型系统。 2https://study.163.com/course/courseMain.htm?courseId=655003
2.宠物行业网站怎么制作.宠物门店品牌网站源码设计网站1. 确定品牌定位和风格:根据宠物门店的品牌定位和风格,设计网站的视觉效果和风格。这包括网站的色彩搭配、字体选择、图片风格等。 2. 规划网站功能模块:根据宠物门店的业务需求,规划网站的功能模块,例如产品展示、在线购物、在线预约等。 3. 开发网站源码:按照规划和设计,开发网站的源码,包括HTML、CSS、JavaScript等前...https://jz.denglie.com/ZXmuban/135193.html
3.宠物店网站模板整站源码专业建站,就用米拓!宠物店响应式网站模板,网站排名更靠前,使用米拓企业建站系统轻松搞定电脑+平板+手机+微官网+小程序(微信、百度、支付宝、字节跳动、QQ、360)10合1企业官网,一键开通,会打字就会建网站!https://www.metinfo.cn/product/3412.html
4.ASP.NET宠物商店网页MyPetShop源代码购物网站mypetshop 基于net的开发购物网站,web程序设计。asp.net实用网站开发 上传者:u011633481时间:2014-06-05 MyPetShop宠物商店源代码-Web程序设计-ASP.NET三层架构 《web程序设计——ASP.NET实用网站开发》课本第十五章源码和《上机实验指导》实验9 ASP.NET三层架构的源码。语言为C# ...https://www.iteye.com/resource/qq_37652570-10149072
5.宠物店网站模板宠物店网站源码下载提供模板及后台所有源文件,可以安装到阿里云,腾讯云或自己的服务器 企业级安全 采用自主研发的PageAdmin系统,系统可通过公安部三级等保安全认证 精美大气 网站模板由专业设计师精心打造,精美大气,彰显网站品牌形象 汽车配件网站模板 塑料橡胶网站模板 建筑装饰网站模板 宠物店网站模板 展览馆网站模板 塑料制品网站模板...https://www.pageadmin.net/moban/4838.cshtml
6.站长宝贝源码pb模板网pbootcms模板下载pboot企业模板PbootCMS模板.站长宝贝模板网(AdminBaby.com)专注pbootcms模板制作及整合.包括pboot企业网站模板,pb精品模板,pbootcms免费模板,pbootcms源码,pbcms模板,PbootCMS整站模板带数据下载和pb开发教程仿站等http://www.adminbaby.com/
7.404页面页面不见了!sorry! 要不您去首页瞧瞧,点击 返回首页.https://www.jxasp.com/h5/8190.html
1.基于Java的宠物服务系统的设计与实现随着社会发展和人们生活水平的提高,越来越多的人开始抚养宠物,人们对宠物的关注程度也逐渐增加,因此,对宠物服务需求不断增加以及宠物服务市场的持续扩大,宠物服务行业而蓬勃发展。 设计和开发一套基于Java的宠物服务系统能够满足人们对于宠物服务的需求,为宠物主人和宠物服务商之间提供一个操作简易和安全性高的宠物服务平台...https://blog.csdn.net/vx_jsjbs999/article/details/143264214
2.宠物狗交流网站怎么做源代码毕业论文基于jsp的宠物狗交流网站-JavaEE实现宠物狗交流网站 - java项目源码 基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的宠物狗交流网站, 该项目可用各类java课程设计大作业中, 宠物狗交流网站的系统架构分为前后台两部分, 最终实现在线上进行宠物狗交流网站各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能,...https://cs-work.com/topic/x2v4oq
3.宠物网站页面设计代码,宠物网站模板源码这是17素材网小编精心准备的一款宠物网站页面设计代码,宠物网站模板源码,精美的页面设计布局,响应式设计模板,可以自定义编辑,欢迎大家下载并且使用。https://www.17sucai.com/pins/48543.html
4.html+css宠物网页设计网站模板源码分享HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 --- #二、作品效果 ## 视频演示 ...https://www.jianshu.com/p/171278e09b09
5.全套源码教程基于SpringBoot+MyBatis+Vue的流浪动物救助网站...项目源码获取请在文末获取博主联系方式! 需求分析 随着人们对动物保护意识的提高,对于流浪动物的救助需求快速增加。该网站可以提供一个平台,让人们更方便地了解和参与流浪动物救助活动。并且网站的设计充分考虑到交互体验和实际使用需求,提供了包括但不限于流浪宠物上架,信息浏览、用户评价、宠物查询、寻宠服务、宠物捐赠...https://cloud.tencent.com/developer/article/2421091
6.BT宠物网站管理系统源码,学教实践,Asp.net源码宠物网站管理系统的设计与实现的特点和用户对宠物销售的需求两个方面考虑,系统应该用户的注册与登录、宠物用品以及宠物的展示与搜索、宠物用品以及宠物的管理、购物车、订单的处理、用户留言等信息的管理功能,从用户上应该分为前台买家用户和后台卖家用户。 源码类型: B/S 开发环境: VS2010 + SQL2008 开发语言: ...https://www.51aspx.com/code/BTPetWebsiteSystem
7.(php毕业设计源码)基于php宠物爱好者交流平台管理系统[php毕业设计项目源码,php毕设下载]宠物爱好者交流平台是基于php编程语言和mysql数据库开发,bs架构的系统。本系统是分为用户和管理员两个角色,用户可以查看网站的宠物信息,可以发布交流,回复交流,发布资源文件下载;管理员管理网站的宠物信息,交流信息,资源,注册用户等;本设计结构清晰,功能齐全,注释完善,适合作为php毕业...https://www.bisheyun.com/product/74
8.新版pbootcms模板宠物商店宠物网站源码宠物装备类网站PbootCMS内核开发的网站模板,该模板适用于宠物行业网站、宠物网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可; 自适应,同一个后台,数据即时同步,简单适用!附带测试数据! 友好的seo,所有页面均都能完全自定义标题/关键词/描述,PHP程序,安全、稳定、快速;用低成本获取源源不断订单! https://m.eq.ah.cn/ah_24546.html
9.宠物领养网站源码,专注收养表单HTML代码,简洁高效,仅输出关键文字...宠物领养网站源码,提供简洁高效的宠物收养表单html代码。用户可通过填写基本信息,轻松提交领养申请。我们致力于打造一个安全、便捷的宠物领养平台,让每只宠物都能找到温暖的家。 5.00点 演示地址查看 后台程序无后台 技术支持无 发布者°sunshine 有效期永久 https://www.moyublog.com/codes/24772.html
10.源码商城pbootcms模板网站模板源码商城(365Ymw.Com)专注网站模板,网站源码,pbootcms模板,企业网站模板,免费模板,商业模板,响应式模板,营销型网站模板,手机站模板,网站源码下载http://www.365ymw.com/
11.JavaScript前端宠物网站代码宠物小程序源码JavaScript前端宠物网站代码 宠物小程序源码 今天我们看下一个宠物商城的小程序,麻雀虽小五脏俱全:私人订制,合作:加微 code_gg_boy 技术架构: 前端: 微信原生开发,vue 主要功能: 首页,分类,购物车,我的,四个页面 相关源码: { "pages": [ { "path": "pages/index/index",...https://blog.51cto.com/u_16213723/9613409
12.响应式宠物资讯类网站源码((自适应手机端))宠物博客经验pbootcms网站模...☉ 如果遇到什么问题,请评论留言,我们定会解决问题,谢谢大家支持! ☉ 本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。 ☉ 本站提供的响应式宠物资讯类网站源码((自适应手机端)) 宠物博客经验pbootcms网站模板资源来源互联网,版权归该下载资源的合法拥有者所有。https://www.jb51.net/codes/810955.html
13.宠物商店宠物网站pbootcms模板源码模板源码介绍: PbootCMS内核开发的网站模板,该模板适用于宠物行业网站、宠物网站等企业,同样适合其他类型行业官网,只需要把网站的图片文字信息,后台修改为其他行业即可投入使用。 特点: 自适应手机端、PC电脑端、平板端、还可以打包成手机APP,一个后台同一数据库自动https://www.yizhanzzw.com/20226.html
14....cms响应式大气宠物食品动物网站模板HTML5猫粮狗粮网站源码...(自适应手机端)pbootcms响应式大气宠物食品动物网站模板 HTML5猫粮狗粮网站源码下载PbootCMS内核开发的网站模板,该模板适用于宠物粮食网站、猫粮狗粮网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;自适应手机端,同一个后台,数据即时同步,简单适用!附带测试数据! 友好的seo,所有页面均都能完全自...https://www.0do.net/4311.html