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

原创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.全球TOP20宠物网站分享所属国家com全球TOP20宠物网站分享 随着人们对于宠物关怀的日益重视,以及宠物市场的飞速发展,宠物用品行业正迎来了蓬勃发展的时期。作为一名跨境卖家,如果你想把握这一商机,那熟悉宠物用品的各种网站是少不了的,今天给大家整理出宠物网站2023年全球TOP20,大家可以去这些网站学习了解很多宠物知识,也可以借助这些热门网站进行宠物用品的...https://pets.sohu.com/a/787369559_121894856
2.宠物森林官方网站刚刚进入《宠物森林》的你,这个阶段就先来好好熟悉一下吧。 10到29级完全指南 这阶段将接触到庄园经营|卡片合成精炼|公会等系统。 30到49级完全指南 神秘的冒险地图,将在这阶段一步步向你敞开大门。 50到79级完全指南 来参加矿山争夺战以及奥斯兰精英挑战赛吧![...http://mf.9you.com/
3.基于宠物领养网站设计:实现萌宠特色功能的源码程序开发选择合适的获取途径,可确信开发者获得高品质的萌宠插件源码,为网站添加更多有趣的互动功能。 三、萌宠插件源码是什么 萌宠插件源码是一系列编程代码,它通过特定的算法和逻辑,实现了在宠物领养网站上的各种互动效果。这些源码常常涵以下几个方面: 1. 前端展示:通过HTML、CSS和JavaScript等技术实现宠物图片的展示、动态...http://www.slrbs.com/jrzg/aitong/128492.html
4.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.asdasdasdasd.cloud/
5.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.ert.qingyou.love/
6.爱萌宠宠物网爱萌宠宠物网是一个综合性质的网站,其中包含宠物服务、宠物知识、宠物品种大全等等。http://www.dmldw.com/
7.我们爱宠物网美国狗证上的7句话(看到最后,泪流满面) 狗狗训练 狗狗训练最好的时期是什么时候? 如果看见小狗在屋中大小便,可以打狗狗吗? 您知道如何让狗狗喜欢你吗? 如何训练狗狗只有得到主人允许,才能进食? 狗狗喂养 持续了14年的狗狗喂食试验:少吃25%,寿命延长50% ...http://weipet.cn/
8.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.m.m.agares.love/
9.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://www.yangbing.love/
10.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.3.tjyz.love/
11.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.poi.zhanghao-xuhuan.love/
12.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.muy.manmiao.design/
13.宠物医疗,看病知识资讯网站宠活网(chonghuo.cn)为你提供专业全面的宠物医疗知识,资讯;帮你在养宠的路上绕坑!https://m.chonghuo.cn/
14.宠物降知识百科养猫养狗的好处坏处和注意事项宝贝快好宝贝快好是宝贝快好(www.bbwell.cn)是领先的宠物健康网站,作为最大的宠物健康知识大百科,免费提供猫咪和狗狗疾病预防常识及常见病治疗及预防方法,是你身边24小时在线的宠物专家,百万网友免费在线咨询提问,在这里人人都是自己的宠物医生。http://www.bbwell.cn/
1.全国十大宠物网站排名国内宠物网站大全全国最大宠物网推荐全国最大宠物网站之一,宠物用品电商平台,汇聚全球知名品牌、国内新兴品牌,以及自有品牌,主营狗狗、猫咪、小宠、水族、爬虫的相关用品,包括但不限于主粮、各类型饲料、医疗护理、生活用具、保健品等。波奇宠物隶属于光橙(上海)信息科技有限公司,2020年9月30日在纽约证券交易所挂牌,成为中国首个上市的宠物综合服务平台。https://m.maigoo.com/citiao/list_105161.html
2.宠物界一个专业的宠物知识分享网站,在这里不仅有宠物种类的介绍,还有家养宠物的推荐、护理、训练等宠物知识分享。想了解宠物信息,就上宠物界!http://chongwj.com/
3.数星趣数星趣是宠物网站,为您提供各类宠物的饲养经验和知识,包含宠物狗、宠物猫、宠物兔、宠物鼠、宠物鸟、宠物鱼等,您身边的养宠物小帮手。https://www.sxhi.com/
4.分享两个小网站:一个可吐槽,一个可了解宠物心事今天简单分享两个小网站,一个是能将动画字幕用于生活中的吐槽的,一个是了解宠物在想什么的。两个站都挺有意思的,大家有空可以打开玩玩儿。 一、AnimeShot 打开AnimeShot后,在搜索栏可以直接搜索你想要的关键词,结果中你可以看到不同分辨率的结果,整个过程无需登录。 https://cloud.tencent.com/developer/news/1296997
5.宠物喂养护理训练医疗降宠物猫狗领养论坛狗的猫宁宠物网-医疗健康、喂养护理、病症百科、宠物训练、交配孕事等丰富的栏目频道是您养宠的百科全书。宠物领养送养、相亲交友、丢失寻主、宠物资讯头条等栏目;为宠物主打造一个功能强大丰富的宠物交流学习平台。https://www.goudemaoning.com/
6.宠物百科网专业的宠物知识信息百科网站宠物百科网(www.f494.com)专业的宠物知识信息百科网站,可以在这里详细了解宠物狗,宠物猫,宠物猪等宠物大全和所有宠物的详细喂养护理以及宠物训练技巧,更有众多网友分享各类宠物知识等你来学习。http://www.f494.com/
7.青柚宠物网青柚宠物网是做宠物资讯的网站,主要提供关于宠物狗、宠物猫、仓鼠、兔子和鹦鹉的信息资讯,想要了解更多宠物生活习惯的知识就上青柚宠物网!http://greenenergyfree.com/
8.青岛宠物网青岛宠物网是专业的宠物网站,专门为爱宠人士提供丰富的宠物知识,其中主要包含有宠物新闻资讯、宠物品种大全、宠物百科大全、宠物狗饲养、宠物猫美容、宠物训练等海量养宠知识,要了解宠物知识百科、分享养宠乐趣就到青岛宠物网。http://17yangchong.cn/
9.宠e生宠物医生在线咨询免费宠物医院在线问诊宠物医院问诊到哪家好?来宠e生宠物医生在线咨询是经营十多年的线上宠物问诊平台.这里有24小时宠物医院的宠物医生在线咨询针对猫,狗,兔子,仓鼠等异宠问诊咨询,兽医专家还提供宠物知识科普,各类宠物疾病预防.https://www.chongesheng.com/
10.宠物资讯网小宠物更多详情 招财鲶吃什么闺蜜带仓鼠做仰卧起坐,二月后看到:八块腹肌太强了!世界上唯一不会飞的鹦鹉,鸟类中的哈士奇,面对天敌只会发呆玻璃青蛙为什么这么透明? 更多详情 少女四成员与制作人郑炳基签约新公司,合作再续佳话 终于迎来to签!刘宇宁履行直播承诺成功要到宋祖儿to签 ...https://www.sdhymczl.com/
11.中国宠物网–宠物猫宠物狗宠物降宠物大全365宠物网中国宠物网/365宠物网是国内具有影响力的宠物门户网站,致力于为爱宠人士提供养宠指南、宠物饲养、宠物美容、宠物训练等海量养宠知识,是属于宠物爱好者的综合型网站。https://chongwu365.cn/