JavaScript实现35选7并记录历史状态
aaarticlea/png;base64,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" alt="" />
一、利用hash实现
随机数方法Math.random();
数字的splice方法;
window.location.hash;
window.onhashchange方法。
1.1 HTML代码
<button id="btn" type="button">35选7</button>
<h3 id="h3"></h3>
1.2 JS代码
window.onload = function(){
var oBtn = document.getElementById('btn'),
oDiv = document.getElementById('h3');
// 定义json用于存储hash对应的值
var json = {};
// 按钮点击事件
oBtn.onclick = function(){
// 获取数组[1,2,3...35]
var arr1 = getArr(35);
// 35选7
var result = getFinalArr(arr1, 7);
// 定义hash对应随机数
var ranNum = Math.random();
window.location.hash = ranNum;
json[ranNum] = result;
oDiv.innerHTML = json[ranNum];
// hash值改变时的事件
window.onhashchange = function(){
oDiv.innerHTML = json[window.location.hash.substring(1)] || null; // 当hash值为空时oDiv.innerHTML赋值为null
}
}
// 35选7方法
function getFinalArr(arr,range){
var _arr1 = [];
for(var i = 0; i < range; i++){
var res = arr.splice(Math.random()*arr.length, 1);
_arr1.push(res);
}
return _arr1;
}
// 生成数组[1,2,3...35]方法
function getArr(num){
var _arr2 =[];
for(var i = 1; i <= num; i++){
_arr2.push(i);
}
return _arr2;
}
}
</script>
二、利用HTML5中的history方法实现
存储历史记录数据:history.pushState(arg1, arg2, arg3);
获取历史记录数据:window.popstate事件发生时,通过event.state获取数据。
2.1 JS代码
window.onload = function(){
/**
* history: pushState(arg1, arg2, arg3)
* ar1 --> 要存储的数据; arg2 --> 标题,目前不被支持,一般为空; arg3 --> 地址(可选,虚拟地址,刷新找不到页面)
* history: popstate事件 event.state
*/
var oBtn = document.getElementById('btn'),
oDiv = document.getElementById('h3');
oBtn.onclick = function(){
// 获取数组[1,2,3...35]
var arr1 = getArr(35);
// 35选7
var result = getFinalArr(arr1, 7);
// 存储历史记录数据
history.pushState(result, '');
oDiv.innerHTML = result;
// hash值改变(即点击前进后退按钮)
window.onpopstate = function(ev){
oDiv.innerHTML = ev.state || null;
}
}
// 35选7方法
function getFinalArr(arr,range){
var _arr1 = [];
for(var i = 0; i < range; i++){
var res = arr.splice(Math.random()*arr.length, 1);
_arr1.push(res);
}
return _arr1;
}
// 生成数组[1,2,3...35]的方法
function getArr(num){
var _arr2 =[];
for(var i = 1; i <= num; i++){
_arr2.push(i);
}
return _arr2;
}
}
JavaScript实现35选7并记录历史状态的更多相关文章
- javascript练习----复选框全选,全不选,反选
第一种方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- javascript 操作复选框无效
<script type="text/javascript"> // 操作checkbox复选框按钮 var inputs = $('#article_list').f ...
- 表单javascript checkbox全选 反选 全不选
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JavaScript 实现全选 / 反选功能
JavaScript 实现全选 / 反选功能 版权声明:未经授权,内容严禁转载! 构建主体界面 编写 HTML 代码 和 CSS 代码,设计主题界面 <style> #user { wid ...
- javascript操作多选下拉列表
闲来无事,把javascript操作多选下拉列表有关的操作知识复习了一遍,代码附上 <%-- Created by IntelliJ IDEA. User: Administrator Date ...
- Javascript实现全选按钮
Javascript实现全选按钮 效果:有全选选项框和单个选项框,选择全选框,所有的的选择都打上的钩,取消全选钩所有的都去掉了钩,如果取消其中某一个的钩,那么全选的钩也取消,反之全选所有的选项,那么全 ...
- JavaScript、全选反选-课堂笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 转发!HTML 复选框 checkbox 的 JavaScript 的全选和全反选
checkbox 或者按钮实现 form 内的 checkbox 全选或者反选,代码很简单,全部代码如下: <html> <head> <meta http-equiv= ...
- jQuery/javascript实现全选全不选
<html> <head> <meta charset="utf-8"> <title>Checkbox的练习</title& ...
随机推荐
- openstack如何整合vmare最佳方案
OpenStack中国社区编者按:通过多年的发展,VMWare在虚拟化市场处于领军地位,很多企业部署了VMWare虚拟化方案,随着OpenStack云计算平台的快速崛起,很多企业都面临一个问题:能否. ...
- HDU 4302 Holedox Eating (线段树模拟)
题意:一个老鼠在一条长度为L的直线上跑,吃蛋糕,老鼠只能沿直线移动.开始时没有蛋糕,老鼠的初始位置是0. 有两个操作,0 x 代表在位置x添加一个蛋糕: 1 代表老鼠想吃蛋糕.老鼠每次都会选择离自己最 ...
- HDU 3268/POJ 3835 Columbus’s bargain(最短路径+暴力枚举)(2009 Asia Ningbo Regional)
Description On the evening of 3 August 1492, Christopher Columbus departed from Palos de la Frontera ...
- python执行linux命令的两种方法
python执行linux命令有两种方法: 在此以Linux常用的ls命令为例: 方法一:使用os模块 1 2 3 shell# python >> import os >> ...
- Internet Secure
key Secret key(密钥):ues the same key to Encryption and decryption(symmetric-key)对称加密,需要绝对安全的空间来传递key ...
- android入门 — ListView
ListView主要是用来解决大量数据展示的问题,它的用途很广泛,几乎所有的app都会用到,比如说知乎.今日头条.微博.通讯录等. ListView允许用户通过上下滑动的方式将屏幕外的数据滚动到屏幕中 ...
- TCP系列23—重传—13、RACK重传
一.RACK概述 RACK(Recent ACKnowledgment)是一种新的基于时间的丢包探测算法,RACK的目的是取代传统的基于dupthresh门限的各种快速重传及其变种.前面介绍的各种基于 ...
- css那些事儿2 盒子模型
盒子模型是网页元素所占据页面窗口的矩形范围,是网页布局的核心基础之一,这里的盒子模型与我们平常收到的包裹类似. 一个包裹从内到外,分为真实物品部分,物品与外壳之间的填充区,外壳的厚度,当多个包裹放置在 ...
- [Leetcode] 2.Add Two Numbers(List To Long,模拟)
本题题意是指将两个数倒序存储在链表中,再将两数之和同样存储在链表中输出. 我最开始的思路是将每一位相加,再考虑是否进位,但这时就需要考虑一些情况,比较麻烦. 于是我决定采取另一种在网上新学到的方法:这 ...
- 第43天:事件对象event
一.事件对象事件:onmouseover. onmouseout. onclickevent //事件的对象 兼容写法:var event = event || window.event; event ...