使用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对象的比较
Feb 26 Javascript
Jquery实现显示和隐藏的4种简单方式
Aug 28 Javascript
gridview生成时如何去掉style属性中的border-collapse
Sep 30 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
Mar 09 Javascript
初识Node.js
Mar 20 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
Angular的MVC和作用域
Dec 26 Javascript
layui弹出层效果实现代码
May 19 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
Vue的H5页面唤起支付宝支付功能
Apr 18 Javascript
Moment.js实现多个同时倒计时
Aug 26 Javascript
基于openlayers实现角度测量功能
Sep 28 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 魔术函数使用说明
2010/05/14 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
jquery 注意事项与常用语法小结
2010/06/07 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
Postman无法正常返回结果问题解决
2020/08/28 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python制作Windows系统服务
2017/03/25 Python
Python set常用操作函数集锦
2017/11/15 Python
python爬虫爬取网页表格数据
2018/03/07 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
优秀党员主要事迹
2014/01/19 职场文书
少儿节目主持串词
2014/04/02 职场文书
学雷锋宣传标语
2014/06/25 职场文书
置业顾问岗位职责
2015/02/09 职场文书
城管个人总结
2015/02/28 职场文书
军训通讯稿范文
2015/07/18 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
一文搞懂MySQL索引页结构
2022/02/28 MySQL
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python