jquery.history.js VS jquery-hashchange

前端之家收集整理的这篇文章主要介绍了jquery.history.js VS jquery-hashchange前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
http://balupton.github.io/jquery-history/demo/

我被jquery.history.js吸引

意思是我发现

http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/

我认为第二个只是基于JQuery。我的意思是它不需要任何额外的插件比jQuery。

jquery.history.js有什么特别之处?比哈希变化?

我应该用什么来覆盖我的浏览器后退和转发按钮?

解决方法

编辑 – 2013年底

名为“sammy.js”的另一个哈希库也很受欢迎。它有一个很好的客户端路由图。客户端路由结构用于处理hashchange事件,以便您可以使用它来为您的某些页面提供单应用程序的功能。详见https://github.com/quirkey/sammy/wiki/Presentations

而且,在下面的例子中,几乎不需要使用正常链接。只要您可以绑定到他们的点击事件,您可以使用按钮,li,任何您想要的ajax响应链接。您使用的路由参数可能存储在点击的元素的数据属性中,或者存储在其他可通过点击元素识别的位置,即。在一个javascript字典对象。点击事件触发后,您可以检索所需的路由值,并使用html5推送状态,jquery-bbq-push状态,hashbanging等。

概观
当您触发ajax或页面事件时,history.js和jquery-bbq库用于维护状态。您可以使用这些库来存储有关浏览器历史记录的信息和/或您操作的URL,以便您可以使用页面上的前进和后退按钮进行ajax调用,选项卡更改,图像浏览,实际上您希望绑定历史记录日志至。这两个库都有一些类似的API用于基本使用。

History.js
新的history.js库使用html5浏览器标准进行pushstate和popstate,如果浏览器不支持html5 pushstate,则返回hashchange方法。 Pushstate允许您将您的网址推送到浏览器栏=更改网址而不重新加载页面!主要存储库是https://github.com/browserstate/history.js

使用它,你
(a)包括脚本文件,(b)绑定到’statechange’事件和(c)处理statechange事件和(d)触发statechange事件当你wnat – 当你的用户点击等等

笔记:
每当用户按向前或向后按钮,状态改变事件将触发。在bind方法/处理程序中,您将调用一个获取相应状态的方法。 (1)
方法/函数History.getState()可用于根据您推送的页面历史记录从服务器获取数据。可以将任何变量存储在状态对象中。通常你想存储一个url。 (0)每当有人点击您要跟踪历史记录的(非页面刷新)链接时,您需要填充历史记录状态。

(0)

$("#navbar").on("click","li[data-ajax-link='true']",function(e) {
        var url = $(this).data('uri');
        var target = $(this).data('target');
        var title = $(this).data('text');
        History.pushState({ url: url,target: target },title,url);
    });

(1)

History.Adapter.bind(window,'statechange',function() {
       updateContent(History.getState());
});

(2)

var updateContent = function(State) {
        var url = State.data.url;
        var $target = $(State.data.target);
        ajaxPost(url,$target);
  };

BBQ

本·阿尔曼的图书馆jquery-bbq.js使用哈希来控制浏览器历史。它完全符合旧版浏览器(因为hashchange就像一个html4技术)。

如果您决定更改链接的默认行为,则单击链接时,(4)您可以拦截链接回发,阻止默认操作,并调用$ .bbq.pushstate。这种pushstate方法在哈希标记之后将内容推入url。 (5)改变url哈希,调用一个’hashchange’事件绑定到你。 (5 cont’d)on hashchange事件,你可以使用$ .bbq.getState(“paramname”)在散列之后得到具有“paramname”的lastet paremeter。这是有用的,因为浏览器将处理正常历史中的哈希值。所以当sombody向前或向后单击时,它会加载上一个或下一个哈希状态。如果您正在使用它来使您的应用程序使用ajax,那么您将做一个ajax回发以获取之前放入哈希的URL。对于另一个如何使用这个的exapmle,看看我最近的答案JQuery BBQ: Where to store URLs?

烧烤历史样本用法

(4)

$("a[data-custom-ajax-link='true']").click(function (e) {
    var target = $(this).data('target');
    var url = $(this).attr('href');
    $.bbq.pushState({ url: url,target: target });
    e.preventDefault();
});

(5)

$(window).bind("hashchange",function(e) {
    var url = $.bbq.getState("url");
    var $target = $($.bbq.getState("target"));
    var frame = $.bbq.getState("target");


    $.ajax({
        url: url,data : null,type: "POST",beforeSend: function (xhr) { xhr.setRequestHeader('X-Target',frame); },success: function (data) {
            $target.html(data);
        }
    });


});

请注意,我刚刚介绍了如何使用这些插件的基础知识。您可以使用这些插件管理使用标签链接或ajax加载的前进和后退按钮。

至于哪一个是“更好”的,很难说。 History.js在〜.5年完全成熟时,将成为更好的图书馆(它仍然是beta版,但是对未来很好的打赌,注意到其github网站上的大量开放性问题和分支)。 Jquery-bbq在3年的频谱的另一边,并没有更新为jquery 1.9遵从。好消息是,它们具有非常相似的实现和功能,因此它不会太糟糕。

History.js将来更容易兼容。看看它的API(大约在https://github.com/browserstate/history.js的一半

为了比较,bbq的API在http://benalman.com/code/projects/jquery-bbq/docs/files/jquery-ba-bbq-js.html页上。它比只有历史部分有一些更多。

猜你在找的jQuery相关文章