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

原创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.基于宠物领养网站设计:实现萌宠特色功能的源码程序开发选择合适的获取途径,可确信开发者获得高品质的萌宠插件源码,为网站添加更多有趣的互动功能。 三、萌宠插件源码是什么 萌宠插件源码是一系列编程代码,它通过特定的算法和逻辑,实现了在宠物领养网站上的各种互动效果。这些源码常常涵以下几个方面: 1. 前端展示:通过HTML、CSS和JavaScript等技术实现宠物图片的展示、动态...http://www.slrbs.com/jrzg/aitong/128492.html
2.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.m.www.zhenxin.love/
3.宠物百科网专业的宠物知识信息百科网站宠物百科网(www.f494.com)专业的宠物知识信息百科网站,可以在这里详细了解宠物狗,宠物猫,宠物猪等宠物大全和所有宠物的详细喂养护理以及宠物训练技巧,更有众多网友分享各类宠物知识等你来学习。http://www.f494.com/
4.宠物商店网站毕业论文.docx此外,该网站还提供宠物寄养、美容、训练等专业服务,以满足宠物在生活中的各种需求。通过访问宠物商店网站,可以轻松地为宠物挑选合适的产品,并了解最新的宠物护理知识和技巧。为毛茸伙伴提供最好的关爱!不要让毛茸伙伴没有一个舒适的生活环境,也不要让他们感到寂寞。宠物商店网站提供了各种各样的宠物用品和服务,让...https://m.book118.com/html/2023/0803/6203213035005210.shtm
5.宠物网站建设策划书可批量添加产品,快速添加产品缩略图或大图,设置产品的属性(如:设置产品为新品/推荐产品/最新上架产品,产品说明等),可将你的产品分类别展示在网站页面,多种风格供你选择。产品搜索功能,可搜索网站上的产品。另外,还可以设置自定义产品属性,别具一格地展示在页面上。http://cn.91zhuji.cn/ztview.php?ID=12444
6.宠物店网站模板整站源码专业建站,就用米拓!宠物店响应式网站模板,网站排名更靠前,使用米拓企业建站系统轻松搞定电脑+平板+手机+微官网+小程序(微信、百度、支付宝、字节跳动、QQ、360)10合1企业官网,一键开通,会打字就会建网站!https://www.metinfo.cn/product/3412.html
1.宠物网站:汇聚宠物爱好者,提供丰富知识资源与情感交流的平台提及宠物网站,那真是个汇集众多宠物爱好者及丰富宠物知识资源的地方。这里犹如宠物世界的线上聚集地,不论是想分享自家的宠物趣闻,还是寻求养宠建议,都能在这里找到满足。 宠物网站上,汇聚了众多最新的宠物信息。这里不仅有宠物展的详细资讯,告诉宠物爱好者展会的时间和地点,甚至还有机会在现场挑选到心仪的宝贝。此外,...https://www.hedu.net/lybk/2024/11/18/18159.html
2.宠物狗网打造降养生的完美平台1. 了解“宠物狗网” 首先,我们要明确什么是“宠物狗网”。它是一个专门为爱犬者设计的网络平台,不仅提供最新的资讯,还有丰富多样的互动功能。这里,你可以与其他同好交流心得体会,也可以寻求专业顾问的建议。此外,“宠物狗网”还包括了一系列关于健康管理和娱乐活动的小程序,这些都是提升你与你的小伙伴之间关系必...https://www.yztep.cn/chong-wu-mao/334747.html
3.宠物服务系统(需求文档)目前国内的在线宠物服务平台主要有4类: 1. 宠物医疗服务平台:一些平台提供宠物医疗预约、线上问诊、用药指导等功能。用户可以通过平台预约宠物就诊时间,与兽医进行在线沟通,获取健康咨询和用药建议。 2. 宠物美容服务平台:这类平台提供宠物美容预约、上门服务、美容用品购买等功能。用户可以通过平台找到附近的宠物美容店,...https://blog.csdn.net/2401_86117023/article/details/143957936
4.宠物用品购买新渠道:宠物店小程序助力商家引流与用户便捷购物...宠物小程序定制开发宠物护理预约小程序模板,显示门店地址信息、电话号码、宠物预约时间。通过展示附近的小程序,推送给宠物主人,让宠物店小程序能够更好的推送出去,从而获得更多的线上资源。 4. 宠物领养 宠物领养功能专为宠物爱好者开发,展示宠物的出生日期、血型、宠物特征等,转化线下交易,让潜在用户安心购买宠物。 https://m.bjhwtx.com/h-nd-347785.html
5.宠物网站建设的类型有哪些?宠物网站建设需要那些功能?且大家针对化合物和精神生活的追求完美也越来越多种多样,因此饲养宠物的人也慢慢增加,但随着社会发展是社会经济发展水平的提高和电子商务的迅速发展趋向,许多人大多数趋于网络购物,因此进行宠物网站建设也是必然趋势。 一、宠物网站建设的类型有哪些? 1、展现型宠物网站建设...https://www.mcbbbk.com/newsview85540.html
6.猫咪网与其他宠物网站的对比分析(以宠物为主的网站之间的区别与优...其他宠物网站:缺乏创意和亮点、活动形式和内容单一,社区功能也不够完善和互动性。 十、网站价值与品牌形象 猫咪网:有爱心的形象为用户所认可和信任、不断推陈出新、提高网站的附加价值和品牌价值,以专业,可靠。 其他宠物网站:缺乏对用户真正的情感连接和体验感受,品牌形象不够鲜明和有特色。 https://www.pettb.cn/article-15753-1.html
7.宠物主义有哪些功能特性呢怎么使用宠物主义呢1. 访问官方网站或相关应用商店,下载并安装“宠物主义”应用。 2. 根据应用提示,注册账号并填写宠物相关信息。 3. 探索应用内的各种功能,了解如何使用。 4. 如有需要,可以参考应用内的帮助文档或联系客服获得更多帮助。 请注意,不同的“宠物主义”应用或服务可能有不同的功能和操作方式,建议您在使用前仔细阅读相...https://www.cnzjfc.com/jyzn/202411/425333.html
8.Web3优秀案例收集整理(附带源码):80+项目创意和案例等待你的...有哪些优秀的Web3项目、创意和案例? 下面是关于web3的一些项目和案例,附带源码地址。 如何使用以太坊、智能合约和Solidity构建你的第一个区块链应用程序? https://youtu.be/coQ5dg8wM2o https://github.com/dappuniversity/eth-todo-list 如何编写和部署NFT? https://maimai.cn/article/detail?fid=1744128853&efid=0ZU5e9Hff_sR0HEXROq_Iw
9.弓形虫病百问百答8.问:患弓形虫(尸虫)病有哪些症状? 答:神经系统症状最为常见,不同程度神经衰弱、神经官能症、抑郁症、多动症、舞蹈症、健忘症、强迫症、癔症、多疑症、偏执症、恐惧症、神经炎,各种不同的功能性疾病。 各种脑病:脑血栓、脑萎缩、脑腔梗、癫痫、偏瘫、精神分裂症、大脑炎等。 https://www.toxo.com.cn/jibing/125-cn.html
10.携带您的宠物旅游若您的行程中包括一趟由加航营销但由我们的代码共享合作夥伴之一运营的航班,您将无法与您的宠物一起乘坐。 欲了解任何我们代码共享合作夥伴或其他航空公司在aircanada.com 出售机票的特定条款及条件,请直接浏览运营航空公司的网站。 可有重量和尺寸限制?相关收费为多少? 允许携带的箱笼最大尺寸 三边之和为 292 公分...https://www.aircanada.com/hk/zh/aco/home/plan/special-assistance/pets.html
11.好的宠物店收银软件应该具备哪些功能?富掌柜收银SaaS系统安装...综上所述,宠物店收银系统的选择应该优先考虑收银系统能够解决门店的哪些问题,想要利用收银系统达到什么目的,只有明确的功能需求才能找到更匹配更适合自己的收银系统,以上三点是收银系统选择的辅助参考标准,可以帮你选择更专业更可靠的收银系统软件商。 富掌柜缴费通富掌柜客服电话...https://www.xa-pos.com/19715.html
12.办公室存在哪些安全隐患(精选18篇)瓶装水中的纯净水虽然是一种“干净水”,但它也是一种不健康的退化水,纯净水只解决了水的污染问题,但没有解决“水退化”和水的生理功能问题。 人体所必须的微量元素与矿物质有5%~20%必需从水中莸取,这些元素在水中的比例同人体的构成比例基本相同,容易被人体吸收,有利干人体的健康,食物中微量元素不能替代一切。https://www.360wenmi.com/f/filenevyl66y.html
13.安全的知识茶水:有经验的保健医生常指导人们用喝茶的方式补钾。钾是人体内重要的微量元素,钾能维持神经和肌肉的正常功能,特别是心肌的正常运动。如果缺钾,人就会感到倦怠乏力,且耐热能力降低。缺钾严重时,会导致心律失常和全身肌无力。科学分析表明,茶叶含钾较多,约占其比重的1。5%左右。钾容易随汗水排出,温度适宜的茶水应该是...https://mip.oh100.com/zhishi/6175877.html
14.全套源码教程基于SpringBoot+MyBatis+Vue的流浪动物救助网站...该网站可以提供一个平台,让人们更方便地了解和参与流浪动物救助活动。并且网站的设计充分考虑到交互体验和实际使用需求,提供了包括但不限于流浪宠物上架,信息浏览、用户评价、宠物查询、寻宠服务、宠物捐赠等功能,让用户可以方便地浏览、购买宠物,同时为管理员提供管理系统、宠物和用户管理的功能。系统需求包括前台展示和...https://cloud.tencent.com/developer/article/2421091
15.宠物乐园网站建设网站建设大概需要花多长时间网站开发阶段通常需要3到4个月时间。 4. 测试 测试是一个至关重要的阶段。在这个阶段,您和您的团队需要对宠物乐园网站进行全面质量控制。测试的目的是检测网站的性能、功能、兼容性等。在这个阶段,您需要完成一些具体的任务,例如: - 执行功能测试、兼容性测试和性能测试等 - 确定功能缺陷并确保网站的操作稳定性 ...http://www.cn86.cn/news/19449.html
16.宠物商店宠物医院网站建设(宠物领养门户网站建设方案)宠物网站建设是进行宠物展示销售的网站,或是提供宠物喂养常识、宠物视频等宠物相关信息,抑或是提供宠物医疗服务的网站。宠物跟人类一样,生活需要食物、乐趣、医疗,所以宠物网站其实功能也都是不一样的。我们今天就来讲讲比较常见的几种类型的宠物网站建设。 https://www.bunze.com/websolution/135.html
17.宠物平台网站建设定制开发制作外包(2)高级版PC+手机站独立定制企业官网:PC站设计效果图+手机站全部提供设计图,开发后台管理系统,PC及手机网站数据同步(3)功能型网站建设开发:根据甲方需要的网站功能进行梳理需求功能定制开发,像类似于房源展示二手房,门户资讯类、商城、素材资源类、在线教育点播付费类等等根据甲方需求进行定制开发 服务优势: (1)14年...https://shop.zbj.com/1009077/sid-1587390.html