歷史管理與router路由
阿新 • • 發佈:2018-12-16
1.router路由管理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>router</title>
</head>
<body>
<script>
//歷史管理
//路由 路徑->路由 獲取路由 對路由進行分發
//頁面路由會進行跳轉window.location.href = 'http://hao123.com'
/*
hash路由,不會跳轉,能夠實現無重新整理的頁面的功能
利用的框架打包上線,都會用hash
如果頁面,也就意味者所有的資料要重新進行渲染,
如果不用hash路由,那麼路由要在服務端進行渲染(如果沒有服務端渲染,那麼重新整理頁面,就會出現404)
前端的框架都遵循前後端分離的思想
*/
window.location.hash = '#home';
//H5
window.history.pushState('name','無效的標題','/path'); //推進一個歷史狀態
//替換一個歷史狀態
window.history.replaceState('name','無效的標題','/path');
</script>
</body>
</html>
2.歷史管理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset= "UTF-8">
<title>歷史管理</title>
<style>
*{
margin:0;
padding:0;
}
body{
background:#ddd;
-webkit-user-select:none;
user-select:none;
}
li{
list-style:none;
}
#box{
width: 80%;
height: 500px;
border:1px solid white;
margin: 150px auto 0;
display:flex;
justify-content: space-around;
align-items:center;
text-align:center
}
ul{
width: 150px;
}
li{
line-height: 35px;
border:1px solid #000;
margin-bottom: 15px;
}
#con{
width: calc( 80% - 200px );
height: 300px;
border:1px solid white;
}
</style>
</head>
<body>
<div id='box'>
<ul id='list'></ul>
<div id='con'></div>
</div>
<script src="data.js"></script>
<script>
let con = document.getElementById('con');
let str = '';
for(let key in data){
str += '<li data-name="'+key+'">'+key+'</li>'
}
list.innerHTML = str;
let aLi = document.querySelectorAll('li');
aLi.forEach(function (item,index) {
item.onclick = function () {
console.log(this.dataset['name']); //列印key
console.log(data[this.dataset['name']]); //列印value
console.log(window.history); //歷史管理
//點選li新增歷史記錄,有歷史記錄就可以,點選前進後退按鈕
let name = decodeURI(this.dataset['name']); //進行解碼,防止中文報錯
if(window.history&&window.history.pushState){
//追加雜湊路由管理
window.history.pushState(name,'追夢','#path='+name);
}
}
});
//點選前進 後退按鈕
window.onpopstate = function (e) {
console.log(e.state); //列印key值
if(e.state){
con.innerHTML = data[e.state];
}
}
window.onhashchange = function () {
console.log(window.location.hash);
}
// 在PC ‘移動端 瀏覽器 都有 前進後退的按鈕
// 但是 app 裡沒有的
// app 都是div模擬的
// 點選div 去實現返回上一個頁面 或 去到下一頁面 自己寫
// window.history.go( -1 ) 這是後退按鈕
// window.history.go( 1 ) 這是前進按鈕
// window.history.go( 0 ) 這是重新整理頁面
// window.history.back() 返回上一個頁面
// window.history.forward() 去到下一個頁面
</script>
</body>
</html>