项目里用到这样的功能:
一旦地址栏中的地址发生变化就调用某个函数。
比如:
<html>
<head>
<title> test </title>
</head>
<body>
<a name="test1" /><a name="test2" /><a name="test3" /><a name="test4" /> <div id="info" style="width:300px;height:50px;border:1px solid #ddd;">the infomation field</div>
<a class="func" href="#test1">test1</a><br />
<a class="func" href="#test2">test2</a><br />
<a class="func" href="#test3">test3</a><br />
<a class="func" href="#test4">test4</a><br /><script type="text/javascript">
function getArgs (url)
{
var _url = "";
if (url)
{
_url = url;
}
else
{
var _url = window.location.href;
}
if (_url.split("#").length <= 1)
{
return "";
}
else
{
return _url.split("#")[1].split(".");
}
}
function reload (url)
{
document.getElementById("info").innerHTML = getArgs(url);
}
</script>
</body>
</html>
现在点击链接以后,页面没有刷新,但是地址栏的地址中的内容发生了变化
要求每次变化以后调用reload()函数。
请问大大们怎么实现。用下面的方法可以达到点击链接调用的目的
但是点浏览器后退按钮的时候没用
window.onload=function()
{
var links = document.getElementsByTagName("a");
for (var i=0; i<links.length; i++)
{
if (/(^|\s)func($|\s)/.test(links[i].className))
{
links[i].onclick = function (){reload(this.href)};
}
}
}
一旦地址栏中的地址发生变化就调用某个函数。
比如:
<html>
<head>
<title> test </title>
</head>
<body>
<a name="test1" /><a name="test2" /><a name="test3" /><a name="test4" /> <div id="info" style="width:300px;height:50px;border:1px solid #ddd;">the infomation field</div>
<a class="func" href="#test1">test1</a><br />
<a class="func" href="#test2">test2</a><br />
<a class="func" href="#test3">test3</a><br />
<a class="func" href="#test4">test4</a><br /><script type="text/javascript">
function getArgs (url)
{
var _url = "";
if (url)
{
_url = url;
}
else
{
var _url = window.location.href;
}
if (_url.split("#").length <= 1)
{
return "";
}
else
{
return _url.split("#")[1].split(".");
}
}
function reload (url)
{
document.getElementById("info").innerHTML = getArgs(url);
}
</script>
</body>
</html>
现在点击链接以后,页面没有刷新,但是地址栏的地址中的内容发生了变化
要求每次变化以后调用reload()函数。
请问大大们怎么实现。用下面的方法可以达到点击链接调用的目的
但是点浏览器后退按钮的时候没用
window.onload=function()
{
var links = document.getElementsByTagName("a");
for (var i=0; i<links.length; i++)
{
if (/(^|\s)func($|\s)/.test(links[i].className))
{
links[i].onclick = function (){reload(this.href)};
}
}
}
页面的焦点:window.onfocus
网页上的每个组件,元素都有onfocus事件,即焦点事件,包括网页本身。
两个页面之间切换会激发网页的焦点事件,window.onfocus .例
<javascript>
window.onfocus=function (){alert("test");};
</javascript>
当两个网页切换时,含有上面方法的页面在获得焦点时会激发onfocus事件,弹出一提示框test-------
还有window.onblur事件等等~
你看看能不能在这些锚点上写onfocus函数来实现你想要的效果~,试试浏览器的前进与后退会不会把焦点从一个锚点移到另一个锚点的吧?
window.onbeforeunload 在页面将要被卸载前触发。 如果加2个事件呢
你不用setInterval是不希望页面一直那么循环,scroll不一定变化~那
我觉得在网页上鼠标肯定在动的吧,没有谁有键盘操作下拉条的吧,
要不写个
document.onmousemove=reload;
鼠标动一下这个就执行几十到上百次(其实现在的浏览器执行上万次也不会卡的);
优点就是鼠标不动或者在其他页面的话这个页面很安静~缺点就是你点了浏览器的"后退",鼠标不拿进document还是没反应~
这个事件调用那个函数呢?
window.onload=window.onbeforeunload=function() { var links = document.getElementsByTagName("a"); for (var i=0; i<links.length; i++) { if (/(^|\s)func($|\s)/.test(links[i].className)) { links[i].onclick = function (){reload(this.href)}; } } }
这样不行?
判断下有没有改变不就可以了
setInterval(function() {
if(location.href != oldLocation) {
do your action
oldLocation = location.href;
}
}, 1000);
我现在暂时用的就是这种办法,看一楼:在不用setInterval的前提下。
只需要改变#后面的部分就可以了,只要JS能根据#后面的变化作出相应反应。除了setInterval没有更好的办法了吗?
像easyXDM这样的跨域库都是用setInterval来监控的。
呵呵,这想法纯粹是冲着"后退按钮"来的,有些不登大雅之堂,与楼主共同期待精通锚点的高手出现!