1. 定义每个弹射的小球组件( ocicle )

2. 组件message自定义属性存放小球初始信息(可修改)
{
top: "0px", //小球距离上方坐标
left: "0px", //小球距离左边坐标
speedX: 12, //小球每次水平移动距离
speedY: 6 //小球每次垂直移动距离
}
3. 思路
3.1 定时器设置小球每一帧移动
3.2 初始方向:isXtrue为true则小球为横坐标正方向;
isYtrue为true则小球为纵坐标正方向
3.3 每次移动之前获取小球当前坐标(oleft,otop),当前坐标加上移动距离为下一帧坐标
3.4 边界判断:横轴坐标范围超过最大值则加号变减号
4. vue知识点
4.1 父子组件传递信息使用props
4.2 模板编译之前获取el宽高
beforeMount: function (){
this.elWidth=this.$el.clientWidth;
this.elHeight=this.$el.clientHeight;
}
4.3 子组件获取el宽高 ( this.$root.elWidth,this.$root.elHeight )
4.4 模板编译完成后更新子组件信息
mounted: function (){
//根据父组件信息更新小球数据
this.addStyle.top=this.message.top;
this.addStyle.left=this.message.left;
this.speedX=this.message.speedX;
this.speedY=this.message.speedY;
//小球初始坐标
this.oleft=parseInt(this.addStyle.left);
this.otop=parseInt(this.addStyle.top);
this.move();
}
5. 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
html,
body{
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
#app{
width: 800px;
height: 500px;
margin: 50px auto;
outline: 1px solid #f69;
position: relative;
}
</style>
</head>
<body>
<div id="app">
<ocicle :message="message1"></ocicle>
<ocicle :message="message2"></ocicle>
<ocicle :message="message3"></ocicle>
</div>
<script src="https://unpkg.com/vue"></script>
<script>
var tem={
props: ["message"],
template: '<div class="article" :style="addStyle"></div>',
data: function (){
return {
//初始化小球样式
addStyle: {
width: "10px",
height: "10px",
backgroundColor: "#000",
position: "absolute",
marginTop: "-5px",
marginLeft: "-5px",
borderRadius: "50%",
top: "0px",
left: "0px"
},
//横坐标方向的速度
speedX: 0,
//纵坐标方向的速度
speedY: 0,
//isX为真,则在横坐标方向为正
isX: true,
//isY为真,则在纵坐标方向为正
isY: true,
//小球当前坐标
oleft: 0,
otop: 0
}
},
mounted: function (){
//根据父组件信息更新小球数据
this.addStyle.top=this.message.top;
this.addStyle.left=this.message.left;
this.speedX=this.message.speedX;
this.speedY=this.message.speedY;
//小球初始坐标
this.oleft=parseInt(this.addStyle.left);
this.otop=parseInt(this.addStyle.top);
this.move();
},
methods: {
move: function (){
var self=this;
setInterval(function (){
//更新小球坐标
self.oleft=parseInt(self.addStyle.left);
self.otop=parseInt(self.addStyle.top);
self.isXtrue();
self.isYtrue();
}, 20);
},
//判断横坐标
isXtrue: function (){
//true 横坐标正方向
//false 横坐标负方向
if(this.isX){
this.addStyle.left=this.oleft+this.speedX+"px";
//宽度超过最大边界
if(this.oleft>this.$root.elWidth-5){
this.addStyle.left=this.oleft-this.speedX+"px";
this.isX=false;
}
}else{
this.addStyle.left=this.oleft-this.speedX+"px";
//宽度超过最小边界
if(this.oleft<5){
this.addStyle.left=this.oleft+this.speedX+"px";
this.isX=true;
}
}
},
// 判断纵坐标
isYtrue: function (){
//true 纵坐标正方向
//false 纵坐标负方向
if(this.isY){
this.addStyle.top=this.otop+this.speedY+"px";
//高度超过最大边界
if(this.otop>this.$root.elHeight-5){
this.addStyle.top=this.otop-this.speedY+"px";
this.isY=false;
}
}else{
this.addStyle.top=this.otop-this.speedY+"px";
//高度超过最小边界
if(this.otop<5){
this.addStyle.top=this.otop+this.speedY+"px";
this.isY=true;
}
}
}
}
}
var vm=new Vue({
el: "#app",
data: {
//获取el节点宽高
elWidth: 0,
elHeight: 0,
//设置小球初始信息
message1: {
top: "0px",
left: "600px",
speedX: 12,
speedY: 6
},
message2: {
top: "0px",
left: "300px",
speedX: 8,
speedY: 6
},
message3: {
top: "300px",
left: "0px",
speedX: 13,
speedY: 5
}
},
//更新el节点宽高
beforeMount: function (){
this.elWidth=this.$el.clientWidth;
this.elHeight=this.$el.clientHeight;
},
components: {
"ocicle": tem
}
})
</script>
</body>
</html>
以上这篇vue组件初学_弹射小球(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# vue
# 弹射小球
# 给大家
# 则在
# 希望能
# 下一
# 自定义
# 这篇
# 小编
# 大家多多
# 完成后
# clientWidth
# elWidth
# beforeMount
# function
# el
# otop
# props
# elHeight
# lt
# move
相关文章:
北京专业网站制作设计师招聘,北京白云观官方网站?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何快速生成凡客建站的专业级图册?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何选择美橙互联多站合一建站方案?
如何快速上传自定义模板至建站之星?
如何正确选择百度移动适配建站域名?
如何快速生成橙子建站落地页链接?
PHP 500报错的快速解决方法
如何快速使用云服务器搭建个人网站?
,有什么在线背英语单词效率比较高的网站?
如何快速搭建FTP站点实现文件共享?
网站制作的步骤包括,正确网址格式怎么写?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
C#如何序列化对象为XML XmlSerializer用法
三星网站视频制作教程下载,三星w23网页如何全屏?
如何设计高效校园网站?
建站主机服务器选购指南:轻量应用与VPS配置解析
寿县云建站:智能SEO优化与多行业模板快速上线指南
制作网站的模板软件,网站怎么建设?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
深入理解Android中的xmlns:tools属性
完全自定义免费建站平台:主题模板在线生成一站式服务
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何在腾讯云免费申请建站?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
公司网站制作价格怎么算,公司办个官网需要多少钱?
金*站制作公司有哪些,金华教育集团官网?
如何在阿里云香港服务器快速搭建网站?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何用已有域名快速搭建网站?
代刷网站制作软件,别人代刷火车票靠谱吗?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
建站之星导航菜单设置与功能模块配置全攻略
家具网站制作软件,家具厂怎么跑业务?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星上传入口如何快速找到?
网站制作服务平台,有什么网站可以发布本地服务信息?
微课制作网站有哪些,微课网怎么进?
建站之星安装需要哪些步骤及注意事项?
C#怎么创建控制台应用 C# Console App项目创建方法
如何通过商城免费建站系统源码自定义网站主题?
专业公司网站制作公司,用什么语言做企业网站比较好?
如何获取上海专业网站定制建站电话?
动图在线制作网站有哪些,滑动动图图集怎么做?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
制作公司内部网站有哪些,内网如何建网站?
c# 在高并发场景下,委托和接口调用的性能对比
*请认真填写需求信息,我们会在24小时内与您取得联系。