滚动时更改网址
当我点击导航按钮时,我正在使用jQuery来更改URL哈希值。 但是当我使用鼠标滚轮滚动时,URL不会改变。 我怎样才能做到这一点? 如何使用它
window.history.pushState(“object or string”, “Title”, “/new-url”);
我无法理解它。 请帮助我的JavaScript代码
$j(document).ready(function () {
$j("#start1").click(function (e) {
e.preventDefault();
var section = this.href,
sectionClean = section.substring(section.indexOf("#"));
$j("html, body").animate({
scrollTop: $j(sectionClean).offset().top
}, 1000, function () {
window.location.hash = sectionClean;
});
});
});
$j(document).ready(function () {
$j("#start2").click(function (e) {
e.preventDefault();
var section = this.href,
sectionClean = section.substring(section.indexOf("#"));
$j("html, body").animate({
scrollTop: $j(sectionClean).offset().top
}, 1000, function () {
window.location.hash = sectionClean;
});
});
});
和html代码是
<a href="#home" id="start1"style="text-decoration:none;position:absolute;right:450px;top:37px;font-weight:bold;color:white;font-size:15px;z-index:200;transition:0.5s" onmouseover="big(this)" onmouseout="small(this)"><span >HOME</span></a>
<span><a href="#products" id="start2" style="text-decoration:none;position:absolute;right:250px;top:37px;font-weight:bold;color:white;font-size:15px;transition:0.5s" onmouseover="big(this)" onmouseout="small(this)">PRODUCTS & SERVICES</a></span>
这里有一些代码可以帮助你 - 它监听scroll
事件,并检查是否有任何anchor
元素在视口中。 如果是,则使用window.history.pushState
更新URL哈希。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Scrolling URL Hash</title>
<meta name="description" content="Webpage for xxxx">
<style>
body {
height: 2000px;
}
a > div {
min-height: 500px;
}
</style>
</head>
<body>
<a href="#anchor1" id="anchor1" class="anchor"><div>ANCHOR 1</div></a>
<a href="#anchor2" id="anchor2" class="anchor"><div>ANCHOR 2</div></a>
<a href="#anchor3" id="anchor3" class="anchor"><div>ANCHOR 3</div></a>
<a href="#anchor4" id="anchor4" class="anchor"><div>ANCHOR 4</div></a>
<a href="#anchor5" id="anchor5" class="anchor"><div>ANCHOR 5</div></a>
<a href="#anchor6" id="anchor6" class="anchor"><div>ANCHOR 6</div></a>
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
// stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
function isElementInViewport (el) {
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
// click-to-scroll behavior
$(".anchor").click(function (e) {
e.preventDefault();
var section = this.href;
var sectionClean = section.substring(section.indexOf("#"));
$("html, body").animate({
scrollTop: $(sectionClean).offset().top
}, 1000, function () {
window.location.hash = sectionClean;
});
});
// listen for the scroll event
$(document).on("scroll", function() {
console.log("onscroll event fired...");
// check if the anchor elements are visible
$(".anchor").each(function (idx, el) {
if ( isElementInViewport(el) ) {
// update the URL hash
if (window.history.pushState) {
var urlHash = "#" + $(el).attr("id");
window.history.pushState(null, null, urlHash);
}
}
});
});
</script>
</body>
</html>
你可以使用waypoint.js。 http://imakewebthings.com/waypoints/guides/getting-started/
这是来自页面的示例代码,当到达航点时抛出一个新的散列。
var waypoint = new Waypoint({ element: document.getElementById('element-waypoint'), handler: function(direction) { notify(this.element.id + ' triggers at ' + this.triggerPoint) }, offset: '75%' })
链接地址: http://www.djcxy.com/p/27027.html
上一篇: change url while scrolling
下一篇: Install app on iOS without Apple Developer Program (Xcode 7)