使用vue编写一个点击数字计时小游戏


Posted in Javascript onAugust 31, 2016

使用vue编写一个点击数字计时小游戏,列入你在文本框中输入3,点击开始会生成一个3行3列的表格,表格数据为1-9随机排列,这时候从1开始点击,按顺序点到9,当按正确顺序点击完毕,会提示所用的时间,如果顺序没有按对,会提示游戏结束. 

1.首先下载vue源码,下载地址http://cn.vuejs.org 

2.jquery是在面向dom操作,而vue是面向数据操作的,所以使用vue最好不要去操作dom,尽量发挥出vue的独到之处,(如果使用过angularjs可能更容易理解) 

3.建立一个普通的html文件,在头部引用vue的源文件

<head>
  <meta charset="utf-8" />
  <title></title>
  <script type="text/javascript" src="js/vue.js"></script>
</head>

4.简单的页面 

1)首先v-model,数据的双向绑定,根据你文本框输入的值变化而变化. 

2)@click绑定一个click事件,其中@是v-on的缩写.当然绑定事件可以带参数例如@click='time(item)'. 

3)v-for="(index, item) in list",循环数组,index为数组的角标,item为数组中的值. 

可以看一下vue文档进一步了解. 

<body>
 <div id="play">
  <span>输入数字,点击开始,会生成对应输入数字的表格,从表格中数字1开始点击,按顺序点击到最后....</span><br />
  <input type="number" v-model="num" />
  <button @click='arr'>开始</button>
  <br />
  <div v-for="(index, item) in list">
  <template v-if="index % num == 0 && index!=0"><br><br><br></template>
  <div style="float: left;"><button class="ibutton" @click='time(item)'>{{item}}</button></div>
  </div>
 </div>
</body>

5.vue操作 

1)首先要new出一个Vue的实例,el绑定你的dom,这里用id作为标识 

2)data这是vue要操作的数据,num文本框的值(默认为2),list[]根据文本框值,生成的list,startTime点击表格的开始时间,endTime点击表格的结束时间,checkNum当前选中的数字. 

3)methods中有两个方法arr用来根据文本框的值,生成一个数组,生成一个文本框值的平方长度,且不会重复的数组,数组的值为1-文本框值的平方,加入文本框的值为3,则生成的数组长度为9,数组的内容为1-9且不重复. 

time计算点击的开始时间和结束时间,用check]Num来控制点击的顺序.

<script>
 new Vue({
  el: '#play',
  data: {
  num: 2,
  list: [],
  startTime: 0,
  endTime:0,
  checkNum:0
  },
  methods: {
  arr: function() {
   if(this.num > 20){
   alert('数值过大,浏览器会死掉,最好不要大于20');
   return;
   }
   this.checkNum = 0;
   var arrlength = this.num * this.num;
   var arr = new Array(arrlength);
   var index = 0;
   for(var i = 1; i <= arrlength; i++) {
   //生成随机数
   var num = Math.random(); //Math.random():得到一个0到1之间的随机数
   num = Math.ceil(num * arrlength); //num*?的取值范围在0~?之间,使用向上取整就可以得到一个1~?的随机
   if(arr[0] != 0) {
    var flag = false; // 控制是否存在重复元素
    // 遍历生产数组中的元素
    for(var j = 0; j < arr.length; j++) {
    if(num != arr[j]) {
     flag = true;
    } else {
     flag = false;
     break;
    }
    }
    if(flag == true) {
    arr[index++] = num;
    } else {
    // 发现有重复元素重新产生新的随机数
    i--;
    }
   } else {
    arr[index++] = num;
   }
   
   }
   this.list = arr;
  },
  time: function(item){
   if(this.checkNum+1 != item){
   alert('game over');
   this.checkNum = 0;
   return; 
   }
   var date = new Date();
   if(item == 1){
   this.startTime = date.getTime();
   }
   if(item == this.num * this.num){
   this.endTime = date.getTime();
   var useTime = ((this.endTime - this.startTime)/1000).toFixed(2);
   alert('使用了'+useTime+'秒');
   this.checkNum = 0;
   return;
   }
   this.checkNum = item;
  }
  }
 })
</script>

6.css代码 

<style>
 .ibutton{
  margin-top: 10px;
  margin-left: 10px;
  color: #fff;
  border: 1px solid #8a6de9;
  background-color: #8a6de9;
  font-size: 14px;
  padding: 6px 12px;
  border-radius: 7px;
  width: 50px;
  height: 40px;
 }
</style>

7.在某些特定的场景使用vue来完成一个功能要比jquery简单的多,但是jquery还是很强大的,根据不同的场景运用不同的技术,更快更好的完成自己想要的功能.

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js借助ActiveXObject实现创建文件
Sep 29 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
IE的事件传递-event.cancelBubble示例介绍
Jan 12 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
Mar 04 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
15款最好的Bootstrap在线编辑器
Aug 03 Javascript
node.js操作mongodb简单示例分享
May 25 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
跟混乱的页面弹窗说再见
Apr 11 Javascript
JS中多层次排序算法的实现代码
Jan 06 Javascript
详解如何解决使用JSON.stringify时遇到的循环引用问题
Mar 23 Javascript
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
Apr 13 Javascript
原生js实现tab选项卡切换
Mar 23 #Javascript
jquery的checkbox,radio,select等方法小结
Aug 30 #Javascript
Javascript日期格式化format函数的使用方法
Aug 30 #Javascript
浅析ES6的八进制与二进制整数字面量
Aug 30 #Javascript
AngularJS轻松实现双击排序的功能
Aug 30 #Javascript
jQuery simpleModal插件的使用介绍
Aug 30 #Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 #Javascript
You might like
php结合飞信 免费天气预报短信
2009/05/07 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
php新建文件的方法实例
2019/09/26 PHP
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
jquery操作select大全
2014/04/25 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
Python自定义线程类简单示例
2018/03/23 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
python requests post多层字典的方法
2018/12/27 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
计算机专业毕业生的自我评价
2013/11/18 职场文书
财务总监岗位职责
2015/02/03 职场文书
小学新教师个人总结
2015/02/05 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python