onHashChange:原生Javascript函数运行良好,但是
onHashChange: native Javascript function works well, but!
我在网上的某个地方发现了这种代码的平静。我试过了,它工作正常:
var onHashChange = function(event) {
//get hash function
var getHashValue = function() {
var arr = window.location.hash.split("#");
var hasValue = arr[1];
//sets default
if (typeof hasValue == "undefined") {
return false;
}
var hashLen = hasValue.indexOf("?");
if(hashLen>0){
hasValue = hasValue.substring(0,hashLen);
}
return hasValue;
}
//last hash
var lastHash = getHashValue();
//checker
(function watchHash() {
var hash = getHashValue();
if (hash !== lastHash) {
event();
lastHash = hash;
}
var t = setTimeout(watchHash, 100);
})();
}
但是,当onHashChange
中多次调用的函数时,它将永远重复。
onHashChange(function() {
console.log("changed");
});
当我在同一页面上并且hash
正在更改时,即使我只对页面中的哈希进行了 3 次更改,console.log
也会充满"更改"的文本!
好吧,我调用一个函数"而不是控制台.log,同时会再次回调onHashChange
有什么技巧可以克服它吗?
谢谢:)
这应该适用于通过 history.replaceState
和 history.pushState
进行哈希更改和 url 更改!
var onUrlChange = function(event) {
var getHashValue = function () {
var arr = window.location.hash.split("#");
var hasValue = arr[1];
if (typeof hasValue == "undefined") {
return false;
}
var hashLen = hasValue.indexOf("?");
if (hashLen > 0) {
hasValue = hasValue.substring(0, hashLen);
}
return hasValue;
}
var getUrlValue = function () {return window.location.pathname;}
var lastHash = getHashValue();
var lastUrl = getUrlValue();
(function watchPath() {
var hash = getHashValue();
var url = getUrlValue();
if (hash !== lastHash) {
event();
lastHash = hash;
}
if (url !== lastUrl) {
event();
lastUrl = url;
}
var t = setTimeout(watchPath, 100);
})();
}
onUrlChange(function () {
//somthing
});
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 按照代码,我正在运行 insiide LongDiv 函数.但是我收到错误 LongDiv 未定义
- Switch函数运行,但是case被忽略
- 主干集合取回在成功调用中不运行任何东西,但是取回所有的东西
- 为什么噩梦在特定站点上运行良好,但是当我尝试使用另一个站点时,它会显示错误
- onHashChange:原生Javascript函数运行良好,但是
- 有人可以帮助我吗?我在javascript文件中的switch语句不起作用,但是当我将其转换为if语句时,它运行良好.我