使用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 相关文章推荐
javascript 类定义的4种方法
Sep 12 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
Nov 05 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
Jun 05 Javascript
不到30行JS代码实现Excel表格的方法
Nov 15 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
javascript实现根据时间段显示问候语的方法
Jun 18 Javascript
js实现input框文字动态变换显示效果
Aug 19 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 Javascript
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
Oct 27 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单例模式详细介绍
2015/07/01 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
Symfony核心类概述
2016/03/17 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
九种js弹出对话框的方法总结
2013/03/12 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
python实现给字典添加条目的方法
2014/09/25 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
Python微信库:itchat的用法详解
2017/08/14 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
Django分组聚合查询实例分享
2020/04/29 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
股权收购意向书
2014/04/01 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis