welefen的随笔

标签存档: pjax

发布pjax1.1版,包含kissy版本

IN:前端开发   标签: ,    评论: 0

之前发布了pjax的开源项目,由于大家的需要,近期对pjax进行了重构,并修复了Firefox下的一些bug。同时包含了kissy的版本。

更新功能如下:

1、接口调用的统一

之前的版本对于jquery和qwrap的2个版本的使用方式是不一致的,这次进行了统一,并对参数也进行了规范。具体如下:

$.pjax({
     selector: 'a',
     container: '#container', //内容替换的容器
     show: 'fade', //展现的动画,支持默认和fade, 可以自定义动画方式,这里为自定义的function即可。
     cache: true, //是否使用缓存
     storage: true, //是否使用本地存储
     titleSuffix: '', //标题后缀
     filter: function(){},
     callback: function(){}
 })

各个参数的含义如下:

=== options.selector

给哪些selector绑定pjax事件,一般的为:”a”, 如果要去掉一些外连的URL, 这里的selector可以为: “a[href^='http://www.welefen.com']”

,表示域名是www.welefen.com下才有pjax事件(也就是站内)。

=== options.container

内容变换容器,是指哪个容器里的内容发生的变换,如: ‘#content’,

=== options.cache

缓存pjax的内容,对于更新不频繁的页面来说,缓存pjax内容可以减少HTTP请求数

options.cache的值是缓存时间,单位为秒,默认为: 24*3600(一天)

=== options.storage

是否使用本地存储进行内容的缓存,使用本地存储缓存的话即使关闭浏览器后,下次访问如果缓存时间有效的话会直接读取缓存的内容,避免重新请求了。

=== options.titleSuffix

标题后缀。

对于pjax显示标题,首先会从返回内容里查找,如果没有的话,会取当前a标签的title值,并可以指定统一的后缀

=== options.filter

过滤函数,虽然options.selector可以写个比较复杂的选择器,但有时候还要过滤一些URL,如:后台的URL。

这时候就可以使用options.filter函数进行过滤了。如:

{
     fitler: function(href){
        //对于wordpress后台的URL和wp-content里的URL不使用pjax
        if(href.indexOf('/wp-admin') || href.indexOf('/wp-content')){
            return true;
        }
     }
 }

对于要过滤掉的URL, 需要返回值为true。

=== options.callback

回调函数,这个函数不同于pjax.start和pjax.end(这2个事件下面描述)事件。

该函数会在每个阶段都会执行,即使pjax发生error的时候,并且会传递一个参数标明当前的状态,如:

{
    callback: function(status){
        var type = status.type;
        switch(type){
             case 'success': ;break; //正常
             case 'cache':;break; //读取缓存
             case 'error': ;break; //发生异常
             case 'hash': ;break; //只是hash变化
        }
    }
 }

2、bug的修订

1)、修复了对hash处理的bug
2)、修复了FF下回退在前进后的问题

3、代码的规范

对代码进行了重构,将不受框架影响的功能放在Util下,并且在不同的框架下,内部实现接口也保持一致。

接口进行规范后,新增一种新框架下的pjax将会非常容易,只要进行一些框架接口调用的改动即可。

4、新加了kissy版本的pjax

感谢junyi。

由于kissy核心没有引用sizzle, 只支持一些简单的selector, 所以selector参数的值最好只为a, 对于一些不使用pjax的链接,可以通过filter函数参数进行过滤。

 

代码在https://github.com/welefen/pjax上实时维护。

02-14
2012

发布gplus主题1.1版

IN:wordpress, 前端开发   标签: , , ,    评论: 10

我们很高兴在这里发布gplus风格的wordpress主题1.1版,这个版本主要是修改了大家反馈的一些bug,同时新加的一些新的功能,具体如下:

1、修复了pjax相关的bug

1) 修复了第一次点击后回退显示的问题(感谢ququ)

2)修复了使用本地缓存的问题

3)修复了pjax后的内容不能进行语法高亮的问题

现在在主题设置里增加了回调函数的选项,在选项里可以填入相关的功能在pjax后执行,如:

继续阅读 »

01-06
2012

pjax发布qwrap版

IN:前端开发   标签: , ,    评论: 0

之前在制作gplus主题的时候,使用到了ajax+history.pushState,并且把这个功能封装成了pjax,由于当时使用的JS框架是jquery,所以pjax是基于jquery写的。

最近决定写一个基于qwrap的pjax,之前一直没时间弄,昨天终于给弄好了。由于qwrap支持retouch,所以使用上和jquery区别不是很大,拿之前的代码稍微改改就可以了。

下载和使用方式

源代码地址:https://github.com/welefen/pjax

由于pjax里使用了ajax组件,qwrap核心库里是不包含ajax组件,所以需要将ajax打包进来。ajax组件可以使用https://github.com/welefen/qwrap/tree/master/resource/js/wagang/ajax,或者你也可以直接引用这个JS http://www.welefen.com/wp-content/themes/gplus/js/qwrap.js

由于qwrap里不支持live模式和核心包里没有动画组件,所以pjax for qwrap版本默认不支持动画,并且使用方式和jquery版本稍微有些差别,具体如下:

QW.pjax(selector, { //selector一般为a[href="^http://domain"]
    filter: function(){}, //filter函数,将不符合条件的a过滤掉
    container: '#container',
    cache: true,
    storage: true
})

其他使用方式(包括服务端判断方式)都和jquery版本的一样

10-10
2011

pjax:ajax和pushState结合的js库

IN:前端开发   标签: , , , , , , , , ,    评论: 7

上篇文章讲到如何使用ajax+pushState打造无刷新改变URL的方式。虽然这种方式是将ajax、history.pushState、history.replaceStatte、window.onpopstate等几个技术点结合,但在具体使用中还是要考虑到很多情况的,如:

1、改变内容的时候也要改变title

2、不支持的浏览器如何处理

3、事件如何绑定,是否使用了delegate模式

4、ajax异常处理

5、ajax前后的自定义事件等

介于有上面等多的疑问,将ajax和pushState封装下,供后面使用还是非常有帮助的。本文就是对pjax(ajax+pushState)的一个介绍

继续阅读 »

07-26
2011

使用ajax和history.pushState无刷新改变页面URL

IN:前端开发   标签: , , , , , , , , , , ,    评论: 2

表现

如果你使用chrome或者firefox等浏览器访问本博客、github.complus.google.com等网站时,细心的你会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器的前进和后退。

是什么有这么强大的功能呢?

HTML5里引用了新的API,就是history.pushState和history.replaceState,就是通过这个接口做到无刷新改变页面URL的。

继续阅读 »

07-23
2011

发布一款Google+版wordpress主题

IN:PHP, wordpress, 前端开发   标签: , , , , , , , , , , , , , , , , ,    评论: 70

ps: 由于plus这个名字在wordpress.org已经使用,该主题改名为 gplus,给大家带来的不便敬请谅解。 

Google+出来后,立即被它简洁的界面吸引了。并且用了ajax+pushstate等技术,以及一些键盘事件,对用户体验有非常大的提升。

正好最近想给自己的博客做个wordpress主题,顺便学习下制作wordpress主题的过程,于是就想到了借鉴google plus的界面了。

下面是plus版主题的预览图:

继续阅读 »

07-20
2011
loading...