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

原创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.宠物网环球宠物平台宠物买卖宠物狗交易宠物网(chongwu.cc)是专业的宠物交易信息发布平台,在宠物网您可以免费查看和发布宠物狗、猫咪、水族等宠物交易信息,免费查看和发布犬粮、宠物服务、宠物用品信息及浏览各种宠物图片。http://www.chongwu.cc/
2.购买饲养新天翼之链宠物系统 购买饲养 宠物知识 宠物技能 宠物进阶图 宠物染色效果图 购买饲养 宠物的购买和饲养: 宠物的购买: 在卡雷德复活点附近(如左图所示红点)找到摩 根,玩家可以在此购买养宠物所需要的孵化器,宠 物蛋,宠物染色瓶. 另外,玩家在打怪当中也能获得怪物的宠物蛋. 高登的蛋-克拉多掉落 果冻鸡的蛋-彩蛋鸡...http://tw.17173.com/up/cw.shtml
3.八宠网八宠网(8chong.com)是行业购宠养宠大品牌,千万家卖狗卖猫卖宠物商家入驻,买放心宠物狗宠物猫,了解宠物价格,学习宠物饲养,就上八宠网、10年品牌值得信赖!https://www.8chong.com/
4.JZ宠物交流网JZ宠物交流网是属于宠物爱好者的综合型网站.这里是宠物猫,宠物狗等宠物爱好者们的集中地.也是包含宠物商城和宠物百科的专业网站.选择波奇宠物网,健康宠物生活从波奇开始http://www.jzzays.com/
5.西宠网西宠网,一个有爱、有趣又有用的宠物网站。为广大爱宠网友提供养宠知识,宠物故事,宠物趣味,宠物百科,宠物大全,宠物医疗,宠物美图,宠物养护,宠物美容,宠物训练,疾病导航等全方面养宠知识信息。http://m.wna.zhanghao-xuhuan.love/
6.123宠物网宠物点评宠物交易买狗卖狗关注我们123网站群:美食网|美容网|宠物网 寄养前的准备 ·巧除家中异味 养狗常识 ·如何选购比利时小牧羊犬 ·狗狗的家庭饮食注意要诀 ·对付一只疯狂的看门狗 ·犬肾上腺皮质机能亢进 ·怎样教狗狗如厕 热门宠物宠物分类 最新点评更多 什么方法?说:什么方法?评: ...http://www.haopet123.com/
7....宠物婚配网站宠物配对app宠物婚配网站狗狗相亲宠物购买...为爱宠寻找属于TA的另一半;宠物相亲、宠物配种、免费领养、宠物寻找、宠物交友,线下活动,宠物线下领养等,还可以挑选自己心仪的宠物;找寻丢失的那个TA;免费领养无家可归的毛孩子!相亲无忧,选购无忧!http://www.ddlove.cn/
1.宠物用品一件代发货源网网购狗狗到哪个网站买好呢阿里巴巴,国内知名的大型综合批发及一件代发平台,各种行业常见的各类商品都非常的齐全丰富,我们养宠生活中需要的产品在上面也是基本都能够找得到,非常非常多的淘宝、天猫、京东、拼多多店主的一件代发产品大部分来自于阿里巴巴。 其他回答 网购狗狗到哪个网站买好呢 ...https://nanoapparatus.com/post/816.html
2.中国十大宠物猫交易网站汇集各大宠物猫交易平台信息→MAIGOO生活榜中国十大宠物猫交易网站 汇集各大宠物猫交易平台信息 摘要:宠物猫可算是一种完美的动物,大自然把它安排得十全十美:猫长得好看、恪尽职守、独立生活、不依赖主人,贡献的多,索取的少。想要买猫咪陪伴自己,可是完全对此一窍不通,不知道购买的渠道,也不清楚什么样的猫咪适合,猫咪的习性是怎样,更重要的是还怕买到...https://m.maigoo.com/top/398280.html
3.网站策划书15篇到百度,iask知识人,天涯问答,雅虎知识堂等问答型社区,发布一些问题,如“在哪个网站买手机好?”“__手机网怎么样”,并且以普通网民的角度作出相应的回答。使我们网站的公信力大大提高。 销售: 和一些手机论坛合作,搞些活动。给站长一些佣金。 利用cps方式和一些个人站长合作,依照其业绩回馈一定比例的佣金。 https://www.pinda.com/zhichang/cehuashu/156631.html
4.买狗狗去哪个网站比较好呢?在生活中有很多朋友们想要买一只狗狗来陪伴自己,这样就不用担心生活上的寂寞了。不过大家在购买狗狗的时候真的是一窍不通,不知道什么样的狗狗适合自己,接下来就请大家随着小编的脚步一起来看看吧。 买狗狗去哪个网站比较好呢?宠物购网拥有上百种宠物狗,能够满足不同消费者们的需求。同时该网站提供的服务大大降低...https://www.chongwugo.cn/541.html
5.基于javaweb的宠物网站设计与实现本系统是采用Java技术来构建的一个基于Web技术的B/S结构的宠物网站,该网站建立在Spring和Struts2框架之上,前台使用JSP作为开发语言,后台使用MySQL数据库管理系统对数据进行管理,开发环境选用MyEclipse,应用服务器采用Tomcat。 宠物网站系统为广大用户实现便捷的购买宠物的功能,实现宠物商店的网络化管理。网站前台系统主要负责...https://blog.csdn.net/weixin_62729694/article/details/134494525
6.10个法国宠物用品购买网站推荐想必各位铲屎官们在宠物身上花的钱也不少吧,但是花钱并不意味着就要在实体店里被宰,现在很多线上宠物店也提供质量比较好且价格便宜的宠物用品,很多还是连锁店,大家完全可以放心购买。那么法国哪里买宠物粮?法国在哪里可以买宠物用品呢?法国有哪些宠物用品店?法国买宠物用品的网站有哪些?今天小编这篇文章就为大家推荐...https://www.extrabux.cn/chs/guide/7871967
7.什么网站可以买狗狗猫咪(推荐几个可靠的宠物购买平台)如果你正在寻找一个可靠的宠物购买平台,那么你来对地方了!在这篇中,我们将推荐几个值得信赖的网站,让你可以轻松地购买到你心仪的狗狗或猫咪。 1. 京东宠物 作为中国的综合性电商平台之一,京东宠物提供了各种各样的宠物用品和宠物食品。除此之外,京东宠物保证所有宠物的品质和健康, ...https://m.fenzhua.com/mmzx/mmyl/83814.html
8.狗粮海淘去哪个平台好?狗粮海淘网站最全推荐!如今随着海淘的不断发展,海淘商品的种类也越来越多,其中就包括海淘宠物用品,像猫粮、狗粮这类宠物食品很多人也选择从国外海淘购买,毕竟相同品牌狗粮国内外差价还是比较大的,而一些国内的杂牌狗粮大家又不放心买回来给自己家里的狗狗吃,那么狗粮海淘去哪个平台好?买狗粮的海淘网站有哪些?本文就给大家来详细说说狗粮海淘网...https://www.mxhaitao.com/gonglue/htjc/3170.html
9.狗铺子买狗卖狗宠物狗交易第一站!狗铺子(GouPuZi.COM)行业购宠第一品牌,千万家卖狗商家入驻覆盖全国各地,买放心宠物狗、了解最全面的宠物狗价格就上狗铺子宠物狗交易网、10年品牌值得信赖!http://www.goupuzi.com/
10.霍格沃兹之遗分院测试网站分享分院测试答案汇总霍格沃兹之遗中分院是游戏官方推出的一项活动,玩家需要回答问题,然后获得奖励,这个活动玩法可以在游戏的官网游玩。这次带来霍格沃兹之遗分院测试网站分享和霍格沃兹之遗分院测试答案汇总,感兴趣的小伙伴一起来看看吧,希望能帮助到大家。 分院测试答案汇总 官方分院测试入口 ...https://gl.ali213.net/html/2023-2/1004685.html
11.全国12315平台热线办理进度查询 请登录 2024年11月25日星期一 投诉公示 企业服务 您购买商品或接受服务 认为经营者侵犯您的合法权益 我要投诉 您发现违反 市场监管法律法规的行为 我要举报 您需要了解 市场监管有关法律法规 我要咨询https://www.12315.cn/
12.瑜飒宠物网瑜飒宠物网是一个专做宠物资讯的网站,在这里可以了解关于狗狗、猫猫、兔子、仓鼠和鹦鹉等宠物的信息。http://www.trashoutstartup.com/
13.成都最大的二手摩托车市场在哪里?成都最大的宠物市场是哪个?地址...成都最大的宠物市场是哪个?地址在哪? 1、东三环附近的青石桥宠2113物市场,但是说实5261话我个人都不推荐,贩子太多4102,容易买1653到带病的。最好是去一些58之类的网站上看看有没有自家养的宠物生仔转让的,然后实际上门考察下看是贩子还是真的自家养。 https://www.yoojia.com/ask/15-11884201404591885196.html
14.在线宠物店网站宠物洗护管理:对宠物的洗护预约进行管理,安排合适的时间,专业的人员对用户的爱宠进行洗护。 预约管理:受理用户的预约信息,并且安排分配相应的时间进行宠物预约的安排。 宠物领养:可以对发布领养信息的宠物进行领养,领养相应的宠物,并且可以在网站上提交领养的基本情况,以便管理员了解到领养人的情况。http://www.jpbysj.com/article/1433.html
15.京东(JD.COM)美妆 / 个护清洁 / 宠物 女鞋 / 箱包 / 钟表 / 珠宝 男鞋 / 运动 / 户外 房产 / 汽车 / 汽车用品 母婴 / 玩具乐器 食品 / 酒类 / 生鲜 / 特产 艺术 / 礼品鲜花 / 农牧园艺 京东买药 / 计生情趣 图书 / 文娱 / 教育 / 电子书 机票 / 酒店 / 旅游 / 生活 支付 / 白条 /...https://www.jd.com/
16.和平精英买小号网站推荐和平精英买小号网站哪个好小编今天将会为大家带来和平精英买小号网站推荐,以及和平精英买小号网站哪个好。相信很多玩家都有玩过和平精英这个游戏,很多玩家在段位提升到一定的等级之后就开始变得十分困难了,所以很多玩家就想要去购买一个小号来锻炼技术,但是现在市场上的游戏交易平台越来越多玩家也不知道该如何选择,今天小编就会为大家推荐一款交易猫平...https://m.jiaoyimao.com/news/108974.html