jQuery的延迟加载插件与HTML pushState()不兼容?
我只是想指出,在垂直滚动页面以延迟加载所有图像时,我正在尝试使用jQuery的延迟加载插件。我正在使用新的HTML5jQuery的延迟加载插件与HTML pushState()不兼容?,jquery,debugging,html,lazy-loading,Jquery,Debugging,Html,Lazy Loading,我只是想指出,在垂直滚动页面以延迟加载所有图像时,我正在尝试使用jQuery的延迟加载插件。我正在使用新的HTML5pushState()方法将url更改为当前在视口中显示的容器(包含图像)的特定名称 无论如何,jQuery的延迟加载插件似乎与pushState()方法不兼容,因为现在这个插件对我不起作用。它只是加载第一个图像,然后停止执行它的操作 只要我删除行window.history.pushState(散列、散列、url)插件工作正常。不会抛出任何错误,因此调试并找到解决方案非常困难 有
pushState()
方法将url更改为当前在视口中显示的容器(包含图像)的特定名称
无论如何,jQuery的延迟加载插件似乎与pushState()
方法不兼容,因为现在这个插件对我不起作用。它只是加载第一个图像,然后停止执行它的操作
只要我删除行window.history.pushState(散列、散列、url)代码>插件工作正常。不会抛出任何错误,因此调试并找到解决方案非常困难
有什么想法吗?我能在这里做什么
编辑:
这里是一个真实的例子,虽然jsBin不支持pushState方法,所以错误不会发生在页面本身
这里有一些真实的示例文件,可以测试这个bug
只需取消对我上面提到的行的注释,就可以看到它工作和不工作 您好,Matt您的问题似乎是pushstate调用中的相对url。以下是我所改变的:
我在js文档的开头添加了一个变量以捕获初始浏览器位置:
$(window).scroll(function() {
hash = $('.layer:in-viewport').attr('id');
if ( currentHash != hash ) { // fires it only one time when in-viewport
if ( history && history.pushState ) { // if method is available
window.history.pushState(hash, hash, url);
}
}
currentHash = hash;
});
$(".layer img").lazyload({
effect: "fadeIn",
});
然后我对pushstate调用中的“url”变量进行了相关更改:
var initialHref = location.href;
第一个图像没有加载的原因是它
现在在Firefox等浏览器中似乎运行良好。这里为您提供了实时版本:
编辑:有趣的是,is中说它可以是一个相对URL,但这似乎不起作用……奇怪。我下载了你的文件,但我看不到错误没有办法!如果我下载文件并在任何浏览器中启动index.html
,则不会加载图像。占位符图像上显示“无可用图像”!只要您在window.history.pushState(散列、散列、url)行中注释完毕
在JS文件中,图像加载没有问题。请再测试一次!在Chrome或Firefox中测试它!如前所述,现在滚动时没有加载任何图像。当我注释掉pushState()时,它工作得很好!没有其他人看到这个问题吗?它似乎在Safari中起到了部分作用,因为只有第一个图像没有得到延迟加载!您好,下面是马特的回答:)首先,谢谢您的回答。但是,我不知道pushstate()方法中的url与lazyload插件有什么关系,也不知道图像是否被加载!但是你让我意识到了这个问题,经过两天的测试、尝试和浪费时间,我终于在我真正的项目上找到了解决方案。问题不是你写的pushstate中的相对URL,而是我的图片的相对URL!所以在我真正的网站上,imgsrc是“img/whatever/photo.jpg”。如果我把它改成“一切正常!”!
if ( currentHash != hash ) {
// ADDED: BUILD THE FULL URL AND APPEND HASH
if(location.href == initialHref){
url = location.href + sl + hash;
}else{
url = location.href.substr(0, location. href.lastIndexOf("/")) + sl + hash;
}
// If history API is available
if ( history && history.pushState ) {
if ( !historyBack ) {
//console.log(url);
window.history.pushState(hash, hash, url);
}
// Fallback to top.location.hash
} else {
$(window).off('hashchange', goToHash);
top.location.hash = url;
setTimeout( function() {
$(window).on('hashchange', goToHash);
}, 0);
}
currentHash = hash;
}