Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery的延迟加载插件与HTML pushState()不兼容?_Jquery_Debugging_Html_Lazy Loading - Fatal编程技术网

jQuery的延迟加载插件与HTML pushState()不兼容?

jQuery的延迟加载插件与HTML pushState()不兼容?,jquery,debugging,html,lazy-loading,Jquery,Debugging,Html,Lazy Loading,我只是想指出,在垂直滚动页面以延迟加载所有图像时,我正在尝试使用jQuery的延迟加载插件。我正在使用新的HTML5pushState()方法将url更改为当前在视口中显示的容器(包含图像)的特定名称 无论如何,jQuery的延迟加载插件似乎与pushState()方法不兼容,因为现在这个插件对我不起作用。它只是加载第一个图像,然后停止执行它的操作 只要我删除行window.history.pushState(散列、散列、url)插件工作正常。不会抛出任何错误,因此调试并找到解决方案非常困难 有

我只是想指出,在垂直滚动页面以延迟加载所有图像时,我正在尝试使用jQuery的延迟加载插件。我正在使用新的HTML5
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; 
}