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

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2024.01.25江苏

原创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源码:gitee.com/zheng_yongt…[3]

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

THE END
1.宠物摄影类别分类素材网站图片免费下载共有374512个宠物摄影类别分类相关内容为您呈现 宠物摄影类别分类大全表宠物摄影类别分类大全集宠物摄影类别分类大全图片宠物摄影类别分类有哪些宠物摄影类别分类表宠物摄影类别分类标准宠物摄影类别分类大全宠物摄影类别分类为 零晨视觉摄影 宠物产品摄影 | 原木鸟爬梯详情页升级 ...https://www.zcool.com.cn/tag/ZNDg0MzMwMA==.html
2.北京百姓网免费发布信息北京分类信息网北京百姓网,北京领先的分类信息网。您可以免费查找北京各种新鲜的二手物品交易、二手车买卖、房屋租售、宠物、招聘、兼职、求职、交友活动及生活服务等分类信息,还能免费发布这些分类信息。http://oliviazhang.beijing.baixing.com/
3.分享116个JS焦点图代码,总有一款适合您HTML5宠物网站焦点图切换特效是一款适合宠物慈善网站的UI设计素材。 jQuery网站首页宽屏导航轮播图 jQuery网站首页宽屏导航轮播图是一款可用于商城首页 微商城 互联网公司或某些电子商城的首页特效。 jQuery自适应焦点图片切换特效 jQuery自适应焦点图片切换特效是一款基于jQuery SuperSlide插件制作的banner大图轮播切换,自适应屏...https://developer.aliyun.com/article/1428203
4.分类168信息网分类168信息网免费发布信息并为用户提供生活相关的分类信息,例如二手房交易买卖,搬家,保洁,二手车买卖,招聘求职等,您也可以免费发布相关生活信息,如二手回收,二手物品出售等。https://fenlei168.com/
5.新分类免费发布信息新分类(xinfenlei.com)是与《新晚报》携手创建的第一家专业高效的生活服务信息分类网站,为您提供最新的房产、旅游、加盟、汽车服务,黄页等分类信息。新分类最权威的分类信息网站。http://www.xinfenlei.com/
1.宠物饲养人的网上世界为宠物爱好者提供喂养繁殖、训导美容、医疗救治等经验交流,提供宠物寄养,宠物交易、宠物器具、寄养、护理等服务信息,分享宠物喂养过程的各种乐趣,发现有同样爱好的您。https://pet09.com/
2.全国十大宠物网站排名国内宠物网站大全全国最大宠物网推荐全国最大宠物网站之一,宠物用品电商平台,汇聚全球知名品牌、国内新兴品牌,以及自有品牌,主营狗狗、猫咪、小宠、水族、爬虫的相关用品,包括但不限于主粮、各类型饲料、医疗护理、生活用具、保健品等。波奇宠物隶属于光橙(上海)信息科技有限公司,2020年9月30日在纽约证券交易所挂牌,成为中国首个上市的宠物综合服务平台。https://m.maigoo.com/citiao/list_105161.html
3.分类:精灵宠物洛克王国维基Fandom和 。 普通系无克制。 普通系 位 宠物: 位 位 土系 位 位 置https://roco.fandom.com/zh/wiki/Category:%E7%B2%BE%E7%81%B5%E5%AE%A0%E7%89%A9
4.新选品网站推荐!它的分类有:海外受欢迎物品/户外宠物家居/还有...从网站名字“oddity”就可以看出这个网站的特别之处,oddity意为“奇特、奇怪的事物”。 里面的产品挺新奇特的,看到有几个是近期独立站/tiktok的爆款,觉得里面的东西挺有趣的就分享一下,传送门:https://odditymall.com/ 它的分类有:海外受欢迎物品/户外宠物家居/还有...令人讨厌的产品和荒谬的产品? 特别的...https://www.cifnews.com/article/125937
5.免费发布黔南其他宠物信息网站1黔南宠物花植 (重选)2黔南其他宠物 (重选)3完成发布 您的IP:116.179.32.109:50125,请勿发布违规或非黔南其他宠物类别的信息。建议仔细阅读发帖版规,请勿从别的网站复制内容一字不改发布。 上传信息图 如没有可不传 最多可上传4张 信息标题 价格 内容详情 ...http://qn.soubaba.com/fabu/339.html
6.2021中国宠物行业分类排行名单e货运宠物托运 友鑫宠物托运 川伊宠物运输 养宠帮宠物托运 舒宠快运 为帮宠托 小眸Smol宠物托运 宠伴旅 宠家宠物 宠道信息 晨宠游 宠圣宠物 宠乐游 鹏捷宠物托运 属我专宠 易丰宠物托运 尤宠快线 大圣宠物托运 宠我宠物托运 2021宠物智能用品品牌TOP10 小佩宠物 霍曼 Pidan彼诞 Unipal有陪宠物 逗号智宠 Ena...https://resource.emagecompany.com/artproducts/2021petrank.html
7.宠物狗排名介绍,宠物狗的分类现如今的宠物狗种类变得越来越多,丰富了大家的选择。而且不同的宠物狗拥有不同的性格特点,所以出现宠物狗排名之说。不过宠物狗排名只是根据大众化需求进行的,仅供大家进行参考,接下来就让我们跟随着小编的脚步一起来了解下。 1.金毛犬 金毛寻回犬作为宠物狗排名比较靠前的狗狗,它对主人非常忠诚,而且对主人的命令很快就...https://www.chongwugo.cn/313.html
8.2024国外十大免费分类广告信息网站汇总在国内58同城可谓为是无人不知无人不晓,大家用的最多的就是在上面租房、找工作、找兼职、找钟点工家政服务、同城二手交易等等。那么国外有像58同城一样的综合分类信息网站吗?其实分类广告网站在国外很流行,大多数分类网站都提供免费服务,作为一种信息产品,拥有信息涵盖https://www.extrabux.cn/chs/guide/6766261
9.动物星球宠物商机网动物星球宠物商机网,是中国专业的宠物行业云媒体资讯服务平台。网站提供:各类萌宠物、宠物猫、宠物狗、宠物展、宠物店、宠物粮、宠物用品、宠物玩具、宠物医院、宠物图片、宠物大全、宠物培训、宠物市场行情等方面的知识与资讯的在线查询宣传测评服务,动物星球宠物商机网https://www.apwol.com/
10.产品研究68款宠物APP产品分析:宠物行业的巨浪淘沙(网经社讯)作者将宠物相关的APP产品进行分类,并选其类型的代表进行分析,让我们了解了宠物行业在不同领域中的发展及业务情况。 在继上一篇68款宠物APP分析(上)文章后这次推出完整版,该文章内容有21478字,篇幅过长请小伙伴们安排好时间。 需要重申该文章并不是一份详细的竞品分析,其目的是了解宠物行业,以及宠物相应...https://maimai.cn/article/detail?fid=1368921073&efid=jmMz1_nUCqB92B3wjI5FXg