主要代码
function $route(urls, viewbox = '#view') {
var self = this;
self.urls = urls;
self.view = viewbox;
self.$to_page = true;
self.to = function(url, view) {
view = view || self.view;
var href = location.href.split('#')[0];
self.$to_page = true;
location.href = href + '#' + url + view;
}
$route_init(self);
}
function $route_init(self) {
var _link = location.href.split('#');
function getPath(url) {
if (!url) {
_link = this.location.href.split('#');
var path = self.urls[0];
for (var i = 0; i < self.urls.length; i++) {
if (self.urls[i].name == _link[1] || self.urls[i].path == _link[1] || self.urls[i].route == _link[1]) {
path = self.urls[i];
break;
}
}
return path;
} else {
var path = '';
for (var i = 0; i < self.urls.length; i++) {
if (self.urls[i].name == url || self.urls[i].path == url || self.urls[i].route == url) {
path = self.urls[i];
break;
}
}
return path;
}
}
window.addEventListener("hashchange", function() {
_link = this.location.href.split('#');
$.get(getPath().path, function(d) {
var html = $(d);
$('#' + (_link[2] || 'view')).html(html);
});
});
$('body').on('click', 'a.routerLink', function(e) {
if (!self.$to_page) {
return false;
}
self.$to_page = false;
var view = $(this).prop('target') || self.view;
var url = $(this).attr('href');
var t_link = location.href;
var t_link2 = location.href + '/';
var t_link3 = location.href + '/#';
if (url == t_link || url == t_link2 || url == t_link3) return false;
if (view != self.view) {
$.get(getPath(url).path, function(d) {
var html = $(d);
$(view).html(html);
});
} else {
self.to(url, view);
}
e.stopPropagation();
return false;
});
$.get(getPath().path, function(d) {
var html = $(d);
$('#' + (_link[2] || 'view')).html(html);
});
}
使用
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#view {
overflow: hidden;
transition: 0.3s;
}
</style>
</head>
<body>
<a class="routerLink" href="/page1">11111111111111111111111</a>
<a class="routerLink" href="/page2" target="#v2">22222222222222222222222</a>
<div id="view"></div>
<div id="v2"></div>
<div>
<h2>foot</h2>
</div>
<script src="../../js/jquery-3.4.1.js"></script>
<script src="router.js"></script>
<script>
var $r = new $route([{
name: "index",
path: "page1.html",
route: "/page1"
}, {
name: "page",
path: "page2.html",
route: "/page2"
}]);
$(function() {})
</script>
</body>
</html>
page1.html
<div>
<h1>1</h1>
</div>
<script>
console.log(1);
</script>
page2.html
<div>
<h1>2</h1>
</div>
<div>
<h1>2</h1>
</div>
<div>
<h1>2</h1>
</div>
<div>
<h1>2</h1>
</div>