123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943 |
- /************************************
- * jq插件区
- ************************************/
- (function($)
- {
-
- $.extend({
- //$().loading()的简化版
- loading:function (options)
- {
- $().loading(options);
- },
- //$().overlay()的简化版,现在可以$.overlay();这么用。
- overlay:function (options)
- {
- $().overlay(options);
- },
- //时间戳
- getTime:function ()
- {
- var time = new Date();
- return time.getTime();
- },
- //$().loadsize();的简化版
- loadsize : function ()
- {
- return $().loadsize();
- },
- esc : function (e)
- {
- // == 27
- if (e.keyCode)
- {
- $('.overlay,.msg,.box').fadeOut(300,function(){$('.overlay,.msg,.box').remove();$(document).unbind('keydown');});
- return false;
- }
- },
- //用$.tip() 代替$().tip();
- tip : function(str, time, url)
- {
- $().tip(str, time, url);
- },
- //定时器
- timing : function ()
- {
- var now = +new Date;
- for(k in $.que)
- {
- if(now > $.que[k])
- {
- $('.msg[serial='+k+'],.overlay[serial='+k+']').remove();
- }
- }
- if($('.msg').length == 0)
- {
- clearInterval(ti); //都消失时停止定时器
- ti = undefined;
- }
- },
- //ajax访问网站
- form : function(rel,func,pre)
- {
- var e = $(".postForm[rel="+rel+"]");
- var url = e.attr('action');
- if(!url)
- {
- $.alert('url undefined',pre);
- }
- if(e.attr('send') != 'ajax')
- {
- e.iframeSubmit({cb:$_c_e('e',func),submit:1});
- return;
- }
- var data = {};
- $(".postForm[rel="+rel+"] .post").each(function(i){if($(this).attr('id')){eval('data.'+$(this).attr('id')+'='+$_c_e('e',$(this).val()));return $(this).check({func:pre})}})
-
- if($_c_d['status'] == false)
- {
- $_c_v('status',true);
- return;
- }
- $.query(url,data,func);
- },
- query : function(url,data,func)
- {
- $.post(url+'.ajax',data,func);
- },
- //html代码过滤
- txt : function()
- {
- return $(this).html().replace(/<\/?[^>]*>/g,'').replace(/[ | ]*\n/g,'\n').replace(/\n[\s| | ]*\r/g,'\n');
- },
- serial : 0, //做为覆盖层和提示层的编号,每次+1
- que : {} //定时器队列,如{1:1245778952,4:1245778958}
- });
- /**
- * 对复选框的操作.action可以是choose,cancel,reverse三种,对应全选,全取消,反选三种.默认全选.参数写错归于reverse
- * 例: $('input[type=checkbox]').checkbox(); //全选
- * $('input[type=checkbox]').checkbox('reverse'); //反选
- */
- $.fn.checkbox = function (action)
- {
- if(!action) action = 'choose';
- this.each(function (i, e){
- if(action=='choose') {
- e.checked = true;
- }else if(action=='cancel') {
- e.checked = false;
- }else{
- e.checked = !e.checked;
- }
- });
- return this;
- },
-
- /**
- * 数据错误时进行提示
- * 例: $('input').status('数据错误',false); //进行验证
- *
- */
- $.fn.status = function (t,f)
- {
- $(this).focus();
- $_c_v('status',false);
- f ? $.alert(t,f) : $(this).tip({str:t,time:1000,place: [120,'middle']});
- //$(this).val('');
- },
- /**
- * 对iframe高度进行控制
- * 例:
- */
- $.fn.iframe = function ()
- {
- if(!$(this).attr('id')) return;
- var frame = document.getElementById($(this).attr('id'));
- var page = document.frames ? document.frames[$(this).attr('id')].document : frame.contentDocument;
- if(frame != null && page != null)
- {
- frame.height = page.body.scrollHeight;
- }
- }
-
- /**
- * 对数据进行监控
- * 例: $('input').monit();
- *
- */
- $.fn.monit = function (c)
- {
- if(!$(this).attr('monit')) return;
- },
- /**
- * 对数据进行验证
- * 例: $('input').check(); //进行验证 需要有以下属性 check="1,2" lang
- *
- */
- $.fn.check = function (c)
- {
- if(!$(this).attr('check')) return;
- //设置参数的默认值
- p = $.extend({
- url: false, //验证地址
- func: false //回调函数名称
- }, c || {});
- var d = $(this).attr('check').split(',');
- if(d[0])
- {
- //不能为空
- if($_c_e('null',$(this).val()))
- {
- $(this).status($(this).attr('lang')+'不能为空',p.func);
- return false;
- }
- }
- if(d[1])
- {
- //验证相等
- if($(d[1]).val() != $(this).val())
- {
- $(this).status($(this).attr('lang')+'不匹配',p.func);
- return false;
- }
- }
- if(d[2])
- {
- //验证正则
- var reg = '';
- var txt = '';
- switch(d[2])
- {
- case 'chi'://中文验证
- reg = /^[\u4e00-\u9fa5]*$/g;
- txt = '必须为中文';
- break;
- case 'acc'://账户验证
- reg = /^[a-zA-Z0-9_]{3,16}$/;
- txt = '只能是英文和数字,字符在3-16之间';
- break;
- case 'mail'://邮箱验证
- reg = /^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
- txt = '格式不对,参考格式:XXXX@XXX.XXX';
- break;
- case 'mobile'://手机验证
- reg = /^1\d{10}$/;
- txt = '号码输入有误';
- break;
- case 'number'://手机验证
- reg = /^-?\\d+$/;
- txt = '不是一个整数';
- break;
- }
- if(!$(this).val().match(reg))
- {
- $(this).status($(this).attr('lang')+txt,p.func);
- return false;
- }
- }
- if(d[3])
- {
- if($_c_d['status_url'] == false && p.func)
- {
- $(this).status($(this).attr('lang')+'已存在',p.func);
- $_c_u('status_url');
- return false;
- }
- //验证数据库中是否存在.
- var $status = $(this);
- $.query(p.url,{val:$(this).val(),check:d[3]},function(t)
- {
- if(t == -1)
- {
- $status.tip({str:$status.attr('lang')+'已存在',time:1000,place: [120,'middle']});
- $_c_v('status_url',false);
- return false;
- }
- else
- {
- $_c_v('status_url',true);
- }
- });
- }
- return true;
- },
- /**
- * 禁止或者激活表单元素。
- * example:
- * 1.禁止或激活整个表单:$('form').disable(); $('form').disable(false);
- * 2.禁止或激活某些元素 $('input').disable();
- */
- $.fn.disable = function (action)
- {
- if(action == undefined) action = true;
- var items = this;
- if($(this).attr('tagName') == 'FORM')
- {
- items = this.find('input[type=text],input[type=radio],input[type=checkbox],textarea,select');
- }
- items.each(function (i,e)
- {
- e.disabled = action;
- });
- return this;
- },
- /**
- * 获取checkbox的值.mod可以是字符串'array'或'str',空参数或写错参数都归为str方式.
- * 例: var val = $('input[type=checkbox]').checkboxVal();
- */
- $.fn.checkboxVal = function (mod)
- {
- if(!mod) mod = 'str';
- var array = new Array(), str = '';
- this.each(function (i, e)
- {
- if(mod=='array')
- {
- if(e.checked) array.push(e.value);
- }
- else
- {
- if(e.checked) str += e.value+',';
- }
- });
- if(mod=='array') return array;
- if(!str) return '';
- return str.substring(0, str.length - 1);
- },
- /**
- * 生成验证数据保存的对象
- *
- */
- $.fn.createCheck = function ()
- {
- $(this).prepend('<input type="hidden" name="'+$(this).attr('name')+'_check" value="'+$(this).attr('check')+'" style="display:none;"/>');
- },
- /**
- * iframe方式提交表单,当有图片上传时.如果有回调函数,PHP需要这样返回
- * if($_GET['cb']) {
- exit("<script>top.{$_GET['cb']}('$data')</script>");
- }
- */
- $.fn.iframeSubmit = function (ob)
- {
- //设置参数的默认值
- p = $.extend({
- debug: 0, //设为1会显示iframe
- url: 'javascript:;', //上传地址
- cb: null, //回调函数名称,不能用匿名函数形式
- submit: 0 //是否显式提交,如果不是写在表单的提交事件中则需设为1
- }, ob || {});
- if(p.url == 'javascript:;') p.url = this.attr('action');
- if(p.cb)
- {
- var temp = p.cb.toString().match(/function[\ ]*([\w]+)/);
- $(this).prepend('<input type="hidden" name="function" value="'+temp[1]+'" style="display:none;"/>');
- }
- if(!p.debug)
- {
- if(!$('iframe[name=uploadIframe]').length)
- {
- $(this).prepend('<iframe name="uploadIframe" style="display:none;"></iframe>');
- }
- $(this).attr('target', 'uploadIframe');
- }
- $(this).get(0).encoding = 'multipart/form-data';
- $(this).attr('action', p.url + '.ajax');
- if(p.submit) $(this).submit();
- }
- //一.简化用法
- //$.tip('2秒后自动消失');
- //$.tip('0.5秒后消失',500);
- //$.tip('不自动消失',0); //按esc键消失,或者调用$.tip('close');
- //$.tip('2秒后自动转到百度,如果按esc键马上就跳转','http://www.baidu.com'); //时间参数和网址参数顺序可对调,因此不需要写成$.tip('内容',2000,url);
- //二.复杂用法.详细可设置请查看设置参数默认值部分,可任意混合设定
- //$.tip({str:'红色文字',color: '#F00'});
- //$.tip({str:'灰色背景',background: '#ccc'});
- //$.tip({str:'透明度设定',opacity: .5});
- //$.tip({str:'透明度和内间距设置',opacity: .5,padding:'6px 20px'});
- //$.tip({str:'不显示覆盖阴影层',overlay:false});
- //$.tip({str:'显示在上方的中间',place: ['center','top']});
- //$.tip({str:'显示在左上方',place: ['left','top']});
- //$.tip({str:'任意位置',place: [100,'top']});
- //三.以上的所有用法都是针对全局显示的,其实都可以为某个元素局部显示,并且可为多个元素显示
- //$('#blogDiv,#replyDiv,#photoDiv').tip('载入中,请稍候'); //其实这种效果使用loading更方便一些.
- //$('#blogDiv,#replyDiv').tip('close'); //只关闭日志与评论部分的提示,photo部分仍然显示
- //还有太多例子了,总之看着参数随意组合吧.
- $.fn.tip = function(options,time,url)
- {
- //简化的用法,例如$('div').tip('信息');
- if(typeof options != 'object' && options != 'close')
- {
- var options = {str: options};
- if(typeof time == 'number') options.time = time;
- if(typeof time == 'string') options.url = time;
- if(typeof url == 'number') options.time = url;
- if(typeof url == 'string') options.url = url;
- }
-
-
- //设置参数的默认值
- var p = $.extend({
- str:' ', //内容
- time:2000, //延时自动消失,单位为毫秒,设为0不消失,按esc键时才消失
- url:'', //提示消失后转向的url
- color: '#666', //字体颜色
- background: '#fff', //背景
- border: '2px dashed #bababa', //边框
- fontloadsize: '12px', //字体大小
- overlay: false, //是否带覆盖层阴影
- textAlign: 'left', //对齐方式
- zIndex: 1500, //z轴
- opacity: 0.2, //背景透明度,如果overlay设为真
- padding: '3px 40px', //内间距
- place:['center','middle'] // ['left','top']或[150,400]
- }, options || {});
-
- var scope = this.attr('tagName') ? 1 : 0;
- this.each(function (i, e)
- {
- var e = scope ? $(e) : $('body');
- if(options=='close')
- {
- return $('.overlay[serial='+e.attr('serial')+'], .msg[serial='+e.attr('serial')+']').remove();
- }
- //取页面尺寸与偏移信息
- var ps = scope ? e.loadsize() : $.loadsize();
-
- //给层编号
- if(e.attr('serial'))
- {
- var serial = e.attr('serial');
- }
- else
- {
- var serial = ++$.serial;
- e.attr('serial', serial) ;
- }
-
- var jq = $('.msg[serial='+serial+']');
- //创建容器
- if(!jq.length)
- {
- var msg = '<div class="msg" serial="'+serial+'" style="position:absolute;display:none;"></div>';
- $('body').append(msg);
- jq = $('.msg[serial='+serial+']');
- }
-
- //数字转成字符串
- if(typeof p.str == 'number') p.str += '';
-
- var leng = p.str.replace(/[^\x00-\xff]/g, "**").length; //字符串真实长度
- if(leng > 40) jq.width(200);
- jq.html(p.str);
-
- jq.css('padding',p.padding).css('z-index',p.zIndex).css('color',p.color).css('background',p.background)
- .css('border',p.border).css('text-align',p.textAlign).css('font-loadsize',p.fontloadsize);
- //创建覆盖层
- if(p.overlay)
- {
- if(scope) e.overlay(p);
- else $().overlay(p);
- }
-
- //开始定位
- var top = 0; var left = 0; var jqw = jq.outerWidth(); var jqh = jq.outerHeight();
- if(p.place[0] == 'center') left = (ps.w - jqw)/2;
- else if(p.place[0] == 'left') left = 10;
- else if(p.place[0] == 'right') left = ps.w - jqw - 20;
- else left = p.place[0];
-
- if(p.place[1] == 'middle') top = (ps.h - jqh)/2;
- else if(p.place[1] == 'top') top = 5;
- else if(p.place[1] == 'bottom') top = ps.h - jqh;
- else top = p.place[1];
-
- //显示
- jq.css('top',top+ps.y).css('left', left+ps.x).fadeIn('fast');
-
-
- if(p.time != 0)
- {
- //加入定时器队列
- $.que[serial] = +new Date + p.time;
-
- if(typeof ti == 'undefined')
- { //一定要判断,不能会有多个定时器同时转动
- ti = setInterval($.timing, 100);
- }
- }
- if(p.url && p.time > 0) setTimeout("location.href='"+p.url+"'", p.time);
- });
-
- //按esc、回车、c键退出
- $(document).keydown(function (e)
- {
- if(p.url)
- {
- setTimeout("location.href='"+p.url+"'", 100);
- }
- });
- $(this).focus();
- return this;
- }
- /**
- * 弹出框,用于比较复杂的内容,特别是ajax载入表单,窗口
- * 例:$.box({url: '/blog/form/34', width: 580, show:function (){alert('载入成功'}});
- * 看着参数自由组合吧,不想写一大堆例子了
- * 这个框组合起来可以实现confirm,alert等特定应用,当然会有简化版$.confirm, $.alert出现
- */
- $.box = function (options)
- {
- if(options == 'close') return $('.overlay, .box').fadeOut(300,function(){$('.overlay, .box').remove()});//非手工关闭方式暂不支持关闭回调
- //参数默认值
- var p = $.extend({
- width: 600,
- height: 0, //设为0则自动调整高度,不出现滚动条
- overlay: true, //是否使用覆盖阴影
- border:'#eeeeee', //整体的边框颜色
- background: '#fff',
- title: '', //如果为空,不显示标题栏
- drag: true, //是否可拖拽,需要drag插件,如果没有也不会报错
- url: '', //ajax载入内容
- show:function(){}, //显示时执行的函数
- close:function(){}, //关闭时执行的函数
- str: '', //显示的内容,与url参数不共存
- closeBtn: true, //是否需要右上角关闭图标
- closeImg: 1, //关闭图标图片
- buttons: [], //按钮组,每个按钮是{text:'确定',handler:fn}形式
- buttonAlign: 'center', //按钮置中(或left,right)
- buttonClass: 'mine-right-model-button', //按钮的class
- style: '', //主容器的css设置
- titleStyle:'', //标题栏css设置
- titleImg:1 //标题栏背景设置
- }, options || {});
-
- //创建覆盖层
- if(p.overlay) $.overlay({opacity:0.2});
-
- //加入box
- if($('.box').length) $('.box').remove();
- $('body').append('<div class="box"></div>');
- var box = $('.box');
-
- //box的调整
- box.css({position:'absolute',visibility:'hidden',overflow:'hidden',width:p.width,zIndex:99,fontloadsize:'12px',color:'#666',
- background: p.background,border:'5px solid '+p.border+'',padding: '20px 6px 10px 6px',overflowY:p.overflow});
- if(p.height) box.height(p.height);
- box.find('select').css({display:'none'});
- if(p.style)
- {
- box.attr('style',box.attr('style') + ';' + p.style)
- }
-
-
- //加入关闭功能
- $(document).unbind('keydown');
- $(document).keydown(function (e)
- {
- if (e.keyCode == 27)
- {
- $('.overlay, .box').fadeOut(300,function(){$('.overlay, .box').remove()});
- p.close.call();
- }
- });
- if(p.closeBtn)
- {
- box.prepend('<a class="boxClose" href="javascript:;" title="点击或按esc键关闭"><img style="display:none;" src="'+$_c_i('close/'+p.closeImg)+'.gif"/></a>');
- $('.boxClose').css({position:'absolute',left:p.width - 5,top:5,zIndex:100,color:'#F00'}).click(function ()
- {
- $('.overlay, .box').fadeOut(300,function(){$('.overlay, .box').remove()});
- p.close.call();
- }).find('img').css('border','none');
- if (box[0].scrollHeight > box[0].offsetHeight)
- { //如果有滚动条,图标位置左移一点
- $('.boxClose').css('left', p.width-20);
- }
- }
-
- //加入标题栏
- if(p.title)
- {
- box.prepend('<div class="boxTitle">'+p.title+'</div>');
- var title = box.find('.boxTitle');
- var titlePos = {position:'absolute',left:0,top:0,height:16,width:box.innerWidth(),background:'#000',
- borderTop:box.css('borderTop'),fontloadsize:'14px',color:'#fff',fontWeight:'bold',padding:4};
- if(p.titleImg)
- {
- titlePos.backgroundImage = 'url('+$_c_i('back/title'+p.titleImg+'.jpg')+')';
- titlePos.backgroundRepeat = 'repeat-x';
- titlePos.backgroundPositionY = 'top';
- }
- title.css(titlePos);
- box.css({borderTop:0,paddingTop:parseInt(box.css('paddingTop')) + 15});
- //$('.boxClose').css('top',10 + $_c_e('int',title.css('borderTop')));
- if(p.titleStyle)
- {
- title.attr('style',title.attr('style') + ';' + p.titleStyle)
- }
- }
-
- //加入按钮组
- if(p.buttons.length)
- {
- box.append('<div class="boxBtn" style="margin-top: 16px;text-align:'+p.buttonAlign+';"></div>');
-
- }
- for(k in p.buttons)
- {
- box.find('.boxBtn').append('<button style="margin:0 5px;float:none;display:inline;">'+p.buttons[k].text+'</button>')
- .find('button:last').click(p.buttons[k].handler);
- }
-
- if(p.buttonClass) box.find('.boxBtn button').addClass(p.buttonClass);
-
- //执行善后工作,自动置中. 显示box,ie6下select的处理
- var epilogue = function ()
- {
- box.center(); //自动置中
- box.css('visibility','visible');//先隐藏再显示,不然在IE中定位时窗口会从左边闪到中间,用透明度来隐藏比display好,不影响定位
- box.find('select').show();
- if(!box.drag || !p.drag) return ;
- //拖拽效果
- if(p.title) {
- box.drag({h: '.boxTitle'});
- }else{
- box.drag();
- }
- $("#boxContent").css({'text-align':'center','margin-top':'10px'});
- }
- //显示内容
- if(p.str)
- {
- box.prepend('<div id="boxContent">'+p.str+'</div>');
- epilogue();
- p.show.call();
- }
- else if(p.url)
- {
- //ajax载入内容,执行回调函数
- $.get(p.url+'.ajax', function (data) {
- box.prepend('<div id="boxContent">'+data+'</div>');
- box.find('select').css('display','none');
- setTimeout(epilogue, 0);
- p.show.call();
- })
- }
- }
- /**
- * box插件的confirm版本
- * @param string str 提示文本
- * @param fn yes 按下yes的回调函数
- * @param fn no 按下no的回调函数,默认为关闭box
- * @example $.confirm('确定删除?', function (){//删除操作});
- */
- $.confirm = function (str, yes, no)
- {
- if(!yes) var yes = function (){$.box('close');};
- if(!no) var no = function (){
- $.box('close');
- };
- var options =
- {
- str:str,
- width: 250,
- closeBtn: false,
- show: function ()
- {
- $('.box .boxBtn button:last').focus()
- },
- buttons:
- [
- {
- text:'确定', handler:function ()
- {
- yes.call();
- }
- },
- {
- text:'取消', handler:no
- }
- ]
- };
- $.box(options);
- }
- /**
- * box插件的alert版本
- * @param string str 提示文本
- * @param fn yes 按下yes的回调函数
- * @example $.alert('很遗憾的说,你的智商低于10');
- */
- $.alert = function (str, yes)
- {
- if(!yes) var yes = function (){$.box('close');};
- var options =
- {
- str:str,
- width: 250,
- closeBtn: false,
- show: function ()
- {
- $('.box .boxBtn button:first').focus();
- },
- buttons:
- [
- {
- text:'确定', handler:function ()
- {
- yes.call();
- }
- }
- ]
- };
- $.box(options);
- }
- /**
- * box插件的msg版本
- * @param string str 信息文本
- * @param string title 信息标题
- * @param string text 信息按钮文本
- * @param string w 宽度
- * @param fn yes 按下yes的回调函数
- * @example $.msg('很遗憾的说,你的智商低于10','标题');
- */
- $.msg = function (str, title, text, yes, show, no, width, btn)
- {
- if(!yes) var yes = function (){$.box('close');};
- if(!no) var no = function (){
- $.box('close');
- };
- var options =
- {
- width:width ? width : 400,
- title:title ? title : '信息提示',
- closeBtn: btn ? btn : true,
- show: function ()
- {
- eval(show);
- $('.box .boxBtn button:last').focus();
- },
- buttons:
- [
- {
- text:text, handler:function ()
- {
- yes.call();
- }
- },
- {
- text:'取消', handler:no
- }
- ]
- };
- if(str.indexOf('.url') == -1)
- {
- options.str = str;
- }
- else
- {
- options.url = str.replace('.url','');
- }
- $.box(options);
- }
- $.fn.extend({
- /**
- * 显示一个覆盖层
- * 整个页面覆盖: $().overlay(); //可以用上面的$.overlay();代替
- * 某个元素覆盖: $('#main').overlay();
- */
- overlay : function (options)
- {
- //设置默认值
- var m = $.extend({
-
- z : 99, //zindex 覆盖高度
- o : 0.2, //opacity 透明度
- l : 1, //loading 加载的图片
- a : '' //action 动作close or loading
- }, options || {});
- var s = this.attr('tagName') ? 1 : 0; //范围是全局还是局部
- this.each(function(i,e)
- {
- if(s)
- {
- e = $(e);//局部
- if(e.next('.overlay').length) return;
- var p = e.loadsize();
- }
- else
- {
- e = $('body');//全局
- if($('body>.overlay[rel=0]').length) return;
- var p = $.loadsize();
- }
- if(options == 'close' || m.a == 'close')
- {
- return $('.overlay[serial='+e.attr('serial')+']').remove();
- }
- //给层编号
- if(e.attr('serial'))
- {
- if($('.overlay[serial='+e.attr('serial')+']').length) return; //不重复添加覆盖层
- var serial = e.attr('serial');
- }
- else
- {
- var serial = ++$.serial;
- e.attr('serial', serial);
- }
- var o = '<div class="overlay" serial="'+serial+'" style="left:0;top:0;display:none;z-index:'+m.z+';position:absolute;text-align:left;"></div>';
- $('body').append(o);
- o = $('.overlay[serial='+serial+']');
- o.css('left',p.x);o.css('top',p.y);
- o.width(p.W).height(p.H).css('opacity',m.o).css('background','#000').fadeIn(300);
- if(m.a == 'loading')
- {
- o.html('<img class="loading" src="'+$_c_i('common/loading/'+m.l)+'.gif" alt="loading..."/>');
- o.find('.loading').css('margin-top',p.h/2 - 8);
- o.find('.loading').css('margin-left',p.w/2 - 8);
- }
- });
- //按esc键退出
- $(document).keydown($.esc);
- return this;
- },
- loadsize : function ()
- {
- //局部元素
- if(this.attr('tagName'))
- {
- var pos = this.offset();
- pos.x = pos.left;
- pos.y = pos.top;
- pos.w = pos.W = this.outerWidth();
- pos.h = pos.H = this.outerHeight();
- return pos;
- }
- //获取浏览器可见部分的定位宽高信息
- var w = document.documentElement.clientWidth;
- var h = document.documentElement.clientHeight;
- var x = document.documentElement.scrollLeft;
- var y = document.documentElement.scrollTop;
- if(self.pageXOffset) //兼容chrome
- {
- x=self.pageXOffset;
- y=self.pageYOffset;
- }
- //整体正文宽高
- var W = $(document).width();
- var H = $(document).height();
- $_c_v('w',W);
- $_c_v('h',H);
- return {w:w, h:h, W:W, H:H, x:x, y:y};
- },
- //$.loading();相当于$.overlay({str:'<img class="loading" src="/res/css/images/loading.gif" alt="loading..."/>'});简化了用法
- loading : function (options)
- {
- if(options == 'close') options = {a:'close'};
- else options = {a:'loading'};
- this.overlay(options);
- return this;
- },
- //跟随滚动条滚动
- follow : function (options)
- {
- var m = this;
- $(window).load(function()
- {
- $(m).followElect(options);
- })
- .scroll(function()
- {
- $(m).followElect(options);
- })
- .resize(function()
- {
- $(m).followElect(options);
- });
- return m;
- },
- //跟随滚动条滚动 效果
- followElect : function(options)
- {
- //设置默认值
- var m = $.extend({
- speed : "fast",
- position : "bottom",
- func : function(){},
- type : 1
- }, options || {});
- if(m.type == 2)
- {
- $(this).slideUp(m.speed,function()
- {
- $(this).slideDown(m.speed);
- $(this).css(m.position,(-parseInt($( document ).scrollTop())+1)+"px");
- m.func.call();
- });
- }
- else
- {
- $(this).css(m.position,(-parseInt($( document ).scrollTop())+1)+"px");
- m.func.call();
- }
- return this;
- },
- //元素置中
- center : function ()
- {
- //box定位
- var p = $.loadsize();
- this.css({left:(p.w-this.outerWidth())/2 + p.x,top:(p.h-this.outerHeight())/2 + p.y});
- },
- /**
- * 拖拽插件,无依赖,为box提供拖拽功能,如果缺少本插件box也不出错,只是无拖拽功能
- * 例: $('div').drag({h:'h2'}); //将div中的h2做为拖拽句柄
- */
- drag : function (options)
- {
- var m = $.extend({
- h: '' //handler 可拖拽点,默认为本身
- },options || {});
- this.each(function (i, e)
- {
- e = $(e);
- var mx,my,x,y,left,top; //mx,my是鼠标点击位置。x,y是元素原始坐标,left,top是元素的css属性
- var mt = $_c_e('int',e.css('margin-top'));
- var ml = $_c_e('int',e.css('margin-left'));
- e.css({position:'absolute'});
- var handler = m.h ? e.find(m.h) : e;
- handler.css('cursor','pointer');
- handler.mousedown(function (ev)
- {
- ev = ev || window.event;
- var of = e.offset();x
- mx = of.left; //元素左上角x坐标
- my = of.top;
- x = ev.pageX; //鼠标x坐标
- y = ev.pageY;
-
- //left = $_c_e('int',e.css('left'));
- //top = $_c_e('int',e.css('top'));
- var l = $_c_d['w'] ? $_c_d['w'] : $(document).width();
- var t = $_c_d['h'] ? $_c_d['h'] : $(document).height();
- var bw = l-$(this).width()-30;
- var bh = t-$(this).height()-55;
-
- $(document).mousemove(function (ec)
- {
- ec = ec || window.event;
- var pl = mx + ec.pageX - x - ml;
- var pt = my + ec.pageY - y - mt;
- pl = pl >= bw ? bw : pl <= 0 ? 0 : pl;
- pt = pt >= bh ? bh : pt <= 0 ? 0 : pt;
- e.css({left:pl, top:pt});
- });
- });
- $(document).mouseup(function ()
- {
- $(document).unbind('mousemove');
- });
- });
- return this;
- }
- })
- })(jQuery);
|