使用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 巧妙去除数组中的重复项
Jan 25 Javascript
关于jquery动态增减控件的一些想法和小插件
Aug 01 Javascript
jquery常用技巧及常用方法列表集合
Apr 06 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
javascript Promise简单学习使用方法小结
May 17 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
Oct 10 Javascript
jQuery Ajax File Upload实例源码
Dec 12 Javascript
vue2实现数据请求显示loading图
Nov 28 Javascript
vue-router 组件复用问题详解
Jan 22 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
Aug 28 Javascript
javascript使用Blob对象实现的下载文件操作示例
Apr 18 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抽象工厂模式(Elgg)
2010/03/21 PHP
学习php中的正则表达式
2014/08/17 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
Windows下python3.7安装教程
2018/07/31 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python安装pil库方法及代码
2019/06/25 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
Python项目打包成二进制的方法
2020/12/30 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
公务员诚信承诺书
2014/05/26 职场文书
护理专业自荐书
2014/06/04 职场文书
二手房购房协议书范本
2014/10/05 职场文书
学习普通话的体会
2014/11/07 职场文书
2014年保卫工作总结
2014/12/05 职场文书
求职信范文怎么写
2015/03/19 职场文书
优秀英文求职信范文
2015/03/19 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
企业工会工作总结2015
2015/05/13 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
2016党员入党决心书
2015/09/22 职场文书
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang