ajax页面局部刷新
使用Ajax 实现页面局部刷新 支持H5的浏览器会保留访问痕迹 链接跟随变化 可后退前进。
/**
-------------------------------------------
* Version 1.0 |
* Autor v-yao |
* QQ 281310716@qq.com |
* Date 2014-01-10 |
* web http://www.chinacoder.cn |
-------------------------------------------
* {OPTIONS} | [type] |(default And Example) | Explanation
* --------- | -------- |---------------------|-----------------------------------------
* @doArea | [string] | 必选 , '#ajaxbox' | Ajax操作区域 ID选择器 #ajaxbox 必须唯一
* @getArea | [string] | 不必须 , '#content' | 默认为'' 见下说明
* @type | [string] | 不必须 , 'click' | 默认为'click' 见下说明
* @url | [string] | 不必须 , 'href' | 默认为a标签'href' 见下说明
* @className| [string] | 不必须 , | 默认为'yao-ajax-yes' 见下说明
* @imgPath | [string] | 不必须 , | 默认为'' 见下说明
* notice: 浏览器url变化和后退前进的history部分需要h5支持 不支持 此方面功能无效
*/
(function($){
//默认参数对象值
var defaults = {
doArea:'', //必须参数 Ajax所要操作的容器
getArea:'', //可选参数 请求的地址输出的有效区域的内容 若不填则 输出urlPath的整个页面 一般情况下 若后端输出的是页面 则需填写去掉公共html部分
type:'click',//可选参数 默认为click 绑定的事件
url:'href', //可选参数 当前元素下 存放请求地址的标签 默认为href 若为其他 请设置其他标签 存放请求url
className:'yao-ajax-yes',//可选参数 用于标记class 也可用其标记 当前选中
imgPath:'' //可选参数 用于等待提示图片链接 一般为gjf 默认为空 仅文字提示
};
//初始化对象
var settings = {},
History = window.history;
$.fn.ajaxLoad = function(options){
var self = this;//记录当前
//对象合并 并加入settings中
$.extend(settings, defaults, options );
var Y = {
ready:function(){
$(self).live(settings.type, Y.ajaxLoad);//绑定事件
Y.windowLoad();
},
doLoad:function(url){
$(settings.doArea).fadeOut("fast");
Y.waitStart();//提示开始
var willUrl = url;
if(settings.getArea != ''){
willUrl = willUrl + " " + settings.getArea;
}
setTimeout(function(){//等待 fadeOut 完成执行
$(settings.doArea).load(
willUrl,
Y.success
);
},200);
},
ajaxLoad:function(e){
e.preventDefault();
var thisSelf = this;//记录当前
//防止同意连接重复点击 并且加入class后 前端易于区分当前链接
if($(thisSelf).hasClass(settings.className) === true){
return;
}
var url = $(thisSelf).attr(settings.url);
Y.doLoad(url);
//成功后处理
$(self).removeClass(settings.className);
$(thisSelf).addClass(settings.className);
if(!$.browser.msie){//如果是ie浏览器 不支持h5 则弃用此功能
//将连接地址 加入浏览器history中 notice: 浏览器支持h5 才可实现
var state = {title: document.title, url: url};
History.pushState(state, null, url);
}
},
windowLoad:function(){
//绑定浏览器前进后退 实现ajax无刷新页面 链接变化且可以后退前进 notice: 浏览器支持html5 才可实现
if(!$.browser.msie){//如果是ie浏览器 不支持h5 弃用此功能
window.addEventListener('popstate', function(e){
if(e.state){
var backUrl = e.state.url;//获取已存入的url
Y.doLoad(backUrl);//做载入动作
}
}, false);
}
},
waitStart:function(){
Y.waitEnd();
var left = $(settings.doArea).offset().left + $(settings.doArea).width() / 2 - 64;//提示框left值
var top = $(settings.doArea).offset().top + $(settings.doArea).height() / 2 - 100;//提示框top值
var isImg = settings.imgPath==''?'':'<div style="height:15px;width:auto;margin-top:10px;background:url(\''+settings.imgPath+'\');"></div>';
$('body').append('<div id="yao-loading" style="position:fixed; z-index:9999;top:'+top+'px;left:'+left+'px;font-weight: bold;margin-top: 20px;width: 128px;height:15px;text-align:center;">加载中...'+isImg+'</div>');
},
waitEnd:function(){
$("#yao-loading").remove();
},
success:function(){
Y.waitEnd();//提示结束
$(settings.doArea).fadeIn();//淡入
}
};
Y.ready();
}
})(jQuery);
应用
$(function($){
var options = {
"doArea":"#ajaxbox", //必须参数 Ajax所要操作的容器
"getArea":"#content",//可选参数 请求的地址输出的有效区域的内容 若不填则 输出urlPath的整个页面
"imgPath":"http://s.tuanweihui.com/static/img/ajax-loaders/ajax-loader-6.gif?v=1"
};
$("a").ajaxLoad(options);
});注: 在本地演示大部分浏览器会对JS操作本地文件很敏感, 获取读不到本地html属于正常情况,在服务器上就不会有这种情况了.
