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

原创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.免扣素材分享可爱小动物插画图片今天为大家分享一组漂亮的免扣PNG图片素材,素材包含了可爱小动物插画图片、彩笔手绘效果对话框图片、竹子荷花等中国风插画元素等内容,每一组的素材内柔都非常的丰富,希望大家可以喜欢。 最后是今天要分享的免扣素材: 图片来源:http://www.daimg.com/scrapbook/202411/291390.html ...https://m.sohu.com/a/826462083_121883415/
2.小猫咪绘画大比拼这次你们更喜欢谁的作品呢小猫咪绘画大比拼 这次你们更喜欢谁的作品呢大宗看萌宠 黑龙江 0 打开网易新闻 体验效果更佳1996年朝鲜饥民越境逃至韩国真实影像,因不想饿死叛逃韩国 大国芝士局 2.9万跟贴 打开APP 两大影帝狂飙演技,仅一个眼神表达多种情感《特工》 一轩影视 1175跟贴 打开APP 伊能静吐槽张菲,是靠费玉清吃饭的 不俗之音 ...https://m.163.com/v/video/VOG20VFS9.html
3.可以导入图片临摹的绘画软件APP推荐可以导入图片临摹的绘画软件其实就是普通的绘画工具,通过导入图片进行临摹,有助于大家对各种食物场景进行描绘,将一些真实的风景通过画笔描述或转述出来,能够最大程度上的帮助大家留存住自己想要的风景,并且通过绘画的方式加深记忆,回味那些的风景。 No.1 AI绘画画板 生活休闲|30.07MB 这是一款实用的绘画技巧练习、绘画学...https://www.wandoujia.com/bangdan/824618/
4.[手绘设计画图]图片免费下载手绘设计画图素材千图网为您找到49张手绘设计画图相关素材,千图网还提供手绘设计画图图片,手绘设计画图素材, 手绘设计画图模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://m.58pic.com/tupian/shouhuishejihuatu.html
5.宠物店装修如何设计图土巴兔装修问答平台为网友提供各种宠物店装修如何设计图问题解答.土巴兔装修问答汇聚海量业主的装修经验和智慧,迅速为业主解决宠物店装修如何设计图的困惑https://www.to8to.com/ask/search/541396
6.在《美丽的惩罚》中,校长惩罚杀害了其宠物狗的麦克劳德()?采用圆锥动力触探试验确定某桥涵地基的承载力,已知该地基为中密碎石土,桥涵地基的最 小边宽b为5m,基底埋置深度h为2m,基底持力层土 的天然重度及基底以上土层的加权平均重度均为1 8kN/m3,若已知地基承载力的基本容许值为488kPa,依照《公路桥涵地基与基础设计规范》(JTGD63 -2007),则上述碎石土层的...https://www.shuashuati.com/ti/d9566640670746f0b8b7a62727ec6b48.html?fm=bdbds855492f129bbbaf6a0f77f666ca72323
7.2016年6月广西壮族自治区普通高中学业水平考试(20212317)D.电子宠物 * 5.下列机构名中,表示“教育”站点的是() A.edu B.org C,com D.gov * 6.下列设备中,属于计算机输入设备的是() A.打印机 B....A.画图 B.写字板 C.美图秀秀 D.暴风影音 * 29.下列文件中,属于视频文件的是() A.春天.bmp B.春天.avi C.春天wma D.春天xls * 30.谷歌旗下...https://www.wjx.cn/jq/116540653.aspx
1....金毛艺术画狗狗彩绘宠物装饰画狗狗装饰画宠物狗装饰画狗狗手绘...昵图网提供AI创作画图,ai素材设计,ai图片大全,设计ai图来昵图网https://www.nipic.com/show/48840490.html
2.怎么样画小狗大全:从萌宠到写实,超全绘画教程!!今年是龙年,祝愿大家都能像龙一样拥有强大的创造力和无限的想象力! 学习怎么样画小狗大全,其实是一个不断学习和实践的过程。 别害怕画错,大胆尝试不同的画法和风格,多练习才能逐渐找到自己的感觉,画出你心中最可爱的小狗! 记得多参考各种图片,仔细观察小狗的细节,你就能画出更加生动的小狗了!https://www.shicehao.com/r2024111402270831c2bj.html
3.简笔画可爱宠物素描可爱简笔画图片大全简笔画可爱宠物素描可爱素描可爱兔子画法简笔画 画图片简笔画小白兔怎么画比较好看可爱采蘑菇的小兔子动物素描画作品 简笔画金毛犬画法教程金毛犬宠物狗素描画的狗狗居然这么可爱简直太 可爱简笔画素描 卡通人物素描图片 简笔画萌萌的卡通人物卡通人物简笔画帅气动漫人物 素描萌狗简笔画可爱集 猫的简笔画加点素描画...https://www.puchedu.cn/jianbihua/43dad40250b268c9.html
4.springbootbanner皮卡丘皮卡丘插件一、获取合适图片包 图片包我们可以通过以下几种方式来获取: 1、自己画图 会作图的同学可以自己画一套专属的图片包。 2、动图或视频中截取 我们从动图或视频中截取关键帧,并将获取到的关键帧背景扣除,这样我们也可以得到一套自己喜欢的图片包。 3、网上寻找资源 ...https://blog.51cto.com/u_16099267/9709436
5.男人按数字画图.罗特韦勒狗的肖像.学习库存图片.图片包括有...照片 关于 男人按数字画图. 罗特韦勒狗的肖像. 学习吸引家庭娱乐. 人才与创造观. 图片 包括有 纵向, 教育, 创建 - 224861995https://cn.dreamstime.com/%E7%94%B7%E4%BA%BA%E6%8C%89%E6%95%B0%E5%AD%97%E7%94%BB%E5%9B%BE-%E7%BD%97%E7%89%B9%E9%9F%A6%E5%8B%92%E7%8B%97%E7%9A%84%E8%82%96%E5%83%8F-%E5%AD%A6%E4%B9%A0-%E5%AD%A6%E4%B9%A0%E5%90%B8%E5%BC%95%E5%AE%B6%E5%BA%AD%E5%A8%B1%E4%B9%90-%E4%BA%BA%E6%89%8D%E4%B8%8E%E5%88%9B%E9%80%A0%E8%A7%82-image224861995
6.html画图代码代码检查三分钟学会processing制造宠物蝎灵Processing的绘图函数不能理解极坐标系,当我们要画图的时候,必须指定笛卡尔坐标系的位置。但是,有时候用极坐标系设计模型会更加方便。 幸运的是,通过三角函数可以完成极坐标系和笛卡尔坐标系的相互转换,这样我们就可以用极坐标系坐标系设计模型,然后用笛卡尔坐标系绘制图形。 https://blog.csdn.net/weixin_39738115/article/details/110571038
7.动物绘画素材动物绘画图片动物绘画图案立即下载 蓝色动物可爱一只可爱的卡通站立猫猫咪绘画背景图片 立即下载 手绘卡通动物小猫咪原创宠物萌宠插画海报素材 立即下载 虎头的数字绘画 立即下载 动物可爱一只卡通企鹅绘画动物企鹅背景图片 立即下载 圣诞节节日氛围感背景插画 立即下载 活泼可爱插画美术艺术绘画文化墙美术校园文化墙 立即下载 小鸟站在树枝...https://www.51miz.com/so-sucai/4308504.html
8.procreate怎么复制图形pr复制图形教程1、找到想要进行修改的图片,点击进入。 2、在画图界面,在想要复制的图形上方,三指向上滑,调出复制粘贴界面,如下图所示。 3、点击弹出界面中的“拷贝”选项,即可复制该图形,如下图所示。 4、然后,我们可以看到其他功能选项都变暗了,我们只能点击右侧的“粘贴”,如下图所示。 https://app.3dmgame.com/mip/gl/215233.html
9.记忆画图2小游戏准备页面说明:选郝要画地图片开始游戏.原图会显示几秒钟后消失.根据原图画出①样地图形.单击右上角地READY按钮提交... 操作的方法:鼠标控制画图。 植物大战僵尸 逗小猴开心6 野蛮停车 忍者蛙 宠物连连看2.5 汽车标志连连看 宠物连连看3.1 田鸡祖玛 宠物连连看 https://www.7k7k7.com.cn/games/17801/
10.用PS画出可爱的猫咪(宠物画法大公开)宠物训练十四:保存图片 在完成整个作品后,我们需要将其保存为jpg或png格式的图片,并命名为自己喜欢的名字,方便以后查看和分享。 十五: 通过这篇文章,我们学习了如何使用PS画出逼真的猫咪,同时也让我们更加了解了我们宠物的细节和特征。希望本文可以为大家提供一些帮助,让我们一起探索更加多样化的画宠物的方法和技巧。https://www.pettb.cn/article-32158-1.html
11.(优选)小学数学教案【设计意图:上课伊始,利用呆萌可爱的宠物狗图片引入,以此来吸引学生的注意力,充分地调动学生的学习积极性和激发学生的兴趣。】 活动二:画一画,抽象除法模型 1、多种表征,抽象除法模型 6根骨头可以画几个○来表示呢?请同学们拿出草稿本,我们一起画一画。 https://www.unjs.com/jiaoan/shuxue/xiaoxue/20230706091031_7364334.html
12.小学英语人教新起点三年级上册UnitPetsUnitPets.docx3宠物的单词图片和卡片(师生各自准备)。4学生画图用白纸或学生自备有关宠物的相片和图片。5课堂学习评价表。教学内容ALets chant1本课通过歌谣引入有关宠物单词的学习。本课的新单词为:pet, turtle, parrot, dog, cat, goldfish, monkey, rabbit, chicken, tail, smart, cute。本课学生曾经在一至四册感知过的...https://m.renrendoc.com/paper/223974826.html
13.比熊犬如何画图片?在画比熊犬的图片之前,你需要准备一些基本的画材。可以选择铅笔、炭笔、彩铅、水彩等不同的材料,以便更好地表现比熊犬的毛发和形态。此外,你还需要准备一张画纸,大小可以根据你的需要和画图方式而定。 1.2 观察比熊犬 在开始画图之前,你需要仔细观察比熊犬的特征。比熊犬有着圆形的头部,大而明亮的眼睛,长而蓬松的...https://www.chongwugo.cn/45062.html
14.blog.ono1.cn/detail/204940.html嗯~啊我被宠物高潮了小说双男 最新午夜宅男麻豆 粉嫩av一区二区白浆 操小粉穴 香含玉女峰头露润滞珠 日女人中国片快一点 中越性感老伙计美少妇黄片 色黄无码免费视频在线 OVA肉食家庭教师寝取报告# 超碰复古乱伦自由 我要看小伙子的大鸡巴干逼真很啊 性生交大图片费看 北条麻妃在线观看 色欲TV国产...http://blog.ono1.cn/detail/204940.html