html5 - history 历史管理
参考文章:
w3c : http://www.w3.org/html/ig/zh/wiki/HTML5/history
张鑫旭 : http://www.zhangxinxu.com/wordpress/2013/06/html5-history-api-pushstate-replacestate-ajax/
zawa : http://zawa.iteye.com/blog/1271031
Demo : Demo
截图:
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>选项卡</title>
<style>
body {background: #444; }
p{margin:0;}
.tab_bor{width:500px;margin:20px auto;overflow:}
.tab_bor ul{padding:10px 10px 0 10px;margin:0; display:inline-block;}
.tab_bor li{border:1px solid #fff;border-bottom:none;background:#1b5775;color:#fff;font-weight:bold;padding:0 10px; line-height:32px; font-size:14px;float:left;margin:0 2px;list-style:none; cursor:pointer;border-bottom:none;}
.tab_bor .active{ border:1px solid #fff;color:#fff; position:relative;top:1px;border-bottom:none;background:#187cc2;}
.tab_bor p{padding:10px;color:#fff;font-size:12px;border:1px solid #fff; display:none;background:#383838;height:100px;}
.tab_bor .show{display:block;background:#187cc2;}
</style>
<script>
window.onload = function(){ var oDiv = document.getElementById('div1'),
aLis = oDiv.getElementsByTagName('li'),
aPs = oDiv.getElementsByTagName('p'); for( var i=0,len = aLis.length;i<len;i++ ){ aLis[i].index = i;
aLis[i].onclick = function(){ var index = this.index ;
var name = this.dataset.name;
var title = '选项卡'+(index+1);
document.title = title;
history.pushState(index,title, '#'+name); for( var i=0,len = aLis.length;i<len;i++ ){
aLis[i].className = '';
aPs[i].className = '';
} this.className = 'active';
aPs[ index ].className = 'show'; } } if( history.pushState ){ window.onpopstate = function( ev ){ var ev = window.event || ev;
var state = ev.state || 0; for( var j=0,len = aLis.length;j<len;j++ ){
aLis[j].className = '';
aPs[j].className = '';
} aLis[state].className = 'active';
aPs[state].className = 'show';
} } window.onhashchange = function(){ setLocHistory(); } setLocHistory(); function setLocHistory(){ var locName = location.href.split("#")[1] || 'tab1'; for( var i=0,len = aLis.length;i<len;i++ ){ if( locName == aLis[i].dataset.name ){ for( var j=0,len = aLis.length;j<len;j++ ){
aLis[j].className = '';
aPs[j].className = '';
} aLis[i].className = 'active';
aPs[i].className = 'show'; } } } }
</script> </head>
<body>
<div class="tab_bor" id="div1">
<ul>
<li class="active" data-name="tab1">标签一</li>
<li data-name="tab2">标签二</li>
<li data-name="tab3">标签三</li>
<li data-name="tab4">标签四</li>
</ul>
<p class="show" data-name="tab1">
内容一
</p>
<p data-name="tab2">
内容二
</p>
<p data-name="tab3">
内容三
</p>
<p data-name="tab4">
内容四
</p>
</div>
</body>
</html>
后记:
这“history.pushState” 必须在服务端才能生肖,所以这页面在服务端打开。
大致讲讲api 前边的文章已经很详尽了:
history.pushState 三个参数 第一个参数为存储的数据,第二值是设置document.title的值(不过这个方法现在还没有完全实现),第三个值是url路径(这个需要和后台配合。。。。其实我也不是很懂。。。。);
window.onpopstate 相当于取值 ev.state 就是history.pushState存储的数据值;
window.onhashchange 只要location有变化就执行方法的事件;
他的应用当然有些说是做这个 翻页的记录什么的 其实也有可以做这些一站式开发的打开判断,我这demo就是模拟一站式开发的意思。
html5 - history 历史管理的更多相关文章
- HTML5自学笔记[ 8 ]历史管理
触发历史管理的三种方法: 跳转页面 改变hash值 pushState(在服务器环境下运行) 用hash值来触发历史管理: <!doctype html> <html lang=&q ...
- HTML5历史管理
边看视频边做的练习,随机显示数字,分别使用history和hash来实现历史管理 <!doctype html> <html> <head> <meta ch ...
- html5 历史管理
1.onhashchange:改变hash值来进行历史管理. <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- HTML5历史管理状态机制
前言:想要不刷新页面同时改变url 可以用HTML5 window对象的 hashChange 事件.同时介绍两个相关的api 和 1个事件. 两个API:1.history.pushState({n ...
- Ajax异步刷新地址栏url改变(利用Html5 history.pushState实现)
早些时候在博客园参阅了不少资料,然后决定入驻博客园分享自己的开发心得,最近准备转方向筹备着辞职交接工作,所以有点忙碌,搁置了一个月才匆匆写下这么一篇随笔,希望能给大家带来一点帮助吧,资料和学识有限,如 ...
- HTML5 History API 实现无刷新跳转
在HTML5中, 1. 新增了通过JS在浏览器历史记录中添加项目的功能. 2. 在不刷新页面的前提下显示改变浏览器地址栏中的URL. 3. 添加了当用户单击浏览器的后退按钮时触发的事件. 通过以上三 ...
- HTML5 History API实现无刷新跳转
在HTML5中, 新增了通过JS在浏览器历史记录中添加项目的功能. 在不刷新页面的前提下显示改变浏览器地址栏中的URL. 添加了当用户单击浏览器的后退按钮时触发的事件. 通过以上三点,可以实现在不刷新 ...
- ajax与HTML5 history pushState/replaceState实例
一.本文就是个实例展示 三点: 我就TM想找个例子,知道如何个使用,使用语法什么的滚粗 跟搜索引擎搞基 自己备忘 精力总是有限的,昨天一冲动,在上海浦东外环之外订了个90米的房子,要借钱筹首付.贷款和 ...
- Clipboard Action for Mac(智能剪贴板历史管理器)破解版安装
1.软件简介 Clipboard Action 是 macOS 系统上一款智能剪贴板历史管理器,它允许剪贴板历史中的每一段内容执行操作.使用 AppleScript 或 Automator 工作 ...
随机推荐
- 全面理解JavaScript中的 this
全面理解JavaScript中的 this 上下文 VS 作用域 作用域(scope) 是在运行时代码中的某些特定部分中变量,函数和对象的可访问性.换句话 说,作用域决定了代码区块中变量和其他资源的可 ...
- idea 快捷键ctrl+shift+f失效的解决方案
我是使用微软自带的拼音输入法,右下角图标--右键--设置--按键,拉到最下面 ---快捷键(简体繁体切换),取消勾选 即可
- HBase单机和集群版部署
1. HBase安装部署 HBase有两种部署模式:单机版模式和集群版模式.无论哪种模式,都需要配置HBase conf目录下的文件.至少,必须在conf/hbase-env.sh文件中添加JAVA_ ...
- python中\r的意义及用法
\r的意义 \r 表示将光标的位置回退到本行的开头位置 \b表示将光标的位置回退一位 在python里print会默认进行换行,可以通过修改参数让其不换行 (1) python2中可以在print语句 ...
- solr集群SolrCloud(solr+zookeeper)windows搭建
SolrCloud是什么 参考 solrCloud官网介绍 http://lucene.apache.org/solr/guide/6_6/solrcloud.html Apache Solr 可以设 ...
- 关于PHP建立数据库访问类的封装以及操作php单例模式连接数据库封装类
建立数据库访问类的封装 <?php class DBDA { public $host = "localhost"; //服务器地址 public $ui ...
- grep 打印相关行内容
grep 打印相关行数常用参数: -r:关键字 -c:打印符合要求的行数 -i:忽略大小写 -n:输出行和行号 -v:打印不符合要求的行,即反选 -A:后跟数字(有无空格都可以),例如 -A3表示打印 ...
- Windows下开启composer镜像服务来安装yii
网上关于使用composer的安装教程挺多的,但是作为新手的我,觉得好凌乱,不断尝试后,终于安装好了.最后总结出,用开启composer的镜像服务来安装yii是最好的啦,当然,归档文件的做法有利有弊就 ...
- Python Django 实用小案例2
动态导入模块 Django返回序列化数据 动态导入模块 在Django里面,经常会看到一些方法或者类是动态导入,尤其是以settings文件为代表,经常把一些类放在里面动态调配,比如随便拿Djang ...
- python selenium+phantomJS自动化测试环境
0x00配置phantomJS 1. 在windows平台下 此种方法是弹浏览器进行自动化测试的. 1.下载谷歌的驱动 https://chromedriver.storage.googleapis. ...