jQuery插件 hank编写 (输入框默认提示 detext, form检验插件 form_check, 自定义显示提示弹窗、浮框 bgmask, 节点移动 ElMove, 异步form提交、文件异步提交 form_iframe, 标签切换 switchTag, 轮播 carousel)
/**
* jQuery插件 hank编写
*/
(function ($){
/*
* v3.4 输入框默认提示 $('#mood_message').detext('请输入文字') || $('#mood_message').detext('请输入文字',{left:2,top:5}); zindex是z-index
* update 3.2 - 3.3 修复父层是relative时的错位 使用offset定位
* ..3.4 - 3.3 增加 label .attr('detext_lab',"1"); 所有相关事件增加 命名空间detext
*/
$.fn.detext = function (text,options){
var my = $(this);
if(!my.is(':visible'))
return false;
//宽带高度的内部默认值,
var defau = {
width:my.width(),
height:my.height(),
"zindex":get_zindex(my)+1
};
//如果外部设置以外部默认值为准
defau = $.extend(defau,$.fn.detext.defaults);
//如果传参数以参数为准
var opts = $.extend(defau, options);
var lab = $('<label>').attr('detext_lab',"1");
var myoffset = my.offset();
var laboffset = {left:(myoffset.left+opts.left),top:(myoffset.top+opts.top)};
var labcssobj = {
cursor:'text',
"z-index":opts['zindex'],
position: "absolute",
width:(opts.width-2*opts.left),
height:(opts.height-2*opts.top)
// "max-width":(opts.width-2*opts.left)+'px',
// "max-height":(opts.height-2*opts.top)+'px'
};
lab.addClass(opts.myclass);
lab.css(labcssobj);
lab.text(text);
my.bind({"focus.detext":function (){
lab.hide();},
"focusout.detext":function (){
if($(this).val()=='')
{
lab.show();
}else
{
lab.hide();
}
}});
lab.bind("click.detext",function (){
var lmy = $(this);
lmy.hide(0,function (){my.focus();});
});
my.after(lab);
lab.offset(laboffset);
//窗口缩放的位置变化
lab.get(0).resite = function (){
var $this = $(this);
if(!$this.is(':visible'))
return;
var poffset = $($this.data('pel')).offset();
var laboffset = {left:(poffset.left+opts.left),top:(poffset.top+opts.top)};
$this.offset(laboffset);
};
//收集这些label
if(!($.fn.detext.detext_el instanceof Array))
$.fn.detext.detext_el = new Array();
$.fn.detext.detext_el.push(lab.get(0));
lab.data('pel',my.get(0));
//窗口缩放的位置变化
if(!$.fn.detext.detext_resize){
$(window).bind("resize.detext",function (){
if(!($.fn.detext.detext_el instanceof Array))
return;
var allel = $.fn.detext.detext_el;
for(var i=0;i<allel.length;i++)
allel[i].resite();
});
$.fn.detext.detext_resize=1;
}
//jq获得元素真实z-index
function get_zindex(jqobj){
if(jqobj.css('z-index')=='auto')
{
return get_zindex(jqobj.parent());
}else
{
return isNaN(parseInt(jqobj.css('z-index')))?0:parseInt(jqobj.css('z-index'));
}
}
return my;
};
$.fn.detext.defaults = {
left: 2,
top: 2,
myclass:'de_text_label'
};
/*
*form 检验插件 v1.5 ie6兼容 $('#formid').form_check(); || $('#formid').form_check({chtype:'focusout',chwarning:function (ele,msg){alert(msg)}});
*节点上可以有 属性,cherrTex错误文本,chaddTex错误文本前缀,其他属性请参考代码
*/
$.fn.form_check = function (options){
var defaults = $.extend({}, $.fn.form_check.defaults);
var opts = $.extend(defaults, options);
var my = $(this);
if(typeof (opts.chright) == 'function')
chright = opts.chright;
if(typeof (opts.chwarning) == 'function')
chwarning = opts.chwarning;
if(opts.chtype == 'focusout'){
$(my).on('focusout.form_check','[chtype]',function (){
var $this = $(this);
var chtype = $(this).attr('chtype');
var chret, addTex = $this.attr('chaddTex') ? $this.attr('chaddTex') : '';
if($this.attr('last')==$this.val())
return;
if(chtype == 'mobile')
chret = chmobile($this.val());
else if(chtype == 'email')
chret = chemail($this.val());
else if(chtype == 'len')
chret = chlen($this.val(),parseInt($this.attr('minlen')),parseInt($this.attr('maxlen')));
else if(chtype == 'password'){
chret = chpass($this.val());
$this.parents('form').eq(0).find('input[chtype=password1]').removeAttr('last');
}else if(chtype == 'password1'){
if($this.val() == $this.parents('form').eq(0).find('input[chtype=password]').val()){
chret = true;
}else
chret = '两次密码输入不一致';
}else if(chtype == 'checked'){
chret = chchecked($this);
}
else
return;
$this.attr('last',$this.val());
if(chret===true)
chright($this);
else{
$this.select();
chret = $this.attr('cherrTex')?$this.attr('cherrTex'):(addTex+chret);
chwarning(chret, $this);
}
});
}else if(opts.chtype == 'submit'){
my.bind("submit.form_check",function (eve){
var isok = true;
var ele, addTex;
my.find('[chtype]').each(function (){
var $this = $(this);
var chtype = $(this).attr('chtype');
var chret;
if(chtype == 'mobile')
chret = chmobile($this.val());
else if(chtype == 'email')
chret = chemail($this.val());
else if(chtype == 'len')
chret = chlen($this.val(),parseInt($this.attr('minlen')),parseInt($this.attr('maxlen')));
else if(chtype == 'password')
chret = chpass($this.val());
else if(chtype == 'password1'){
if($this.val() == $this.parents('form').eq(0).find('input[chtype=password]').val()){
chret = true;
}else
chret = '两次密码输入不一致';
}else if(chtype == 'checked'){
chret = chchecked($this);
}
else
return true;
if(chret !== true){
isok = chret;
ele = $this;
return false;
}
});
if(isok !== true){
addTex = ele.attr('chaddTex') ? ele.attr('chaddTex') : '';
isok = ele.attr('cherrTex')?ele.attr('cherrTex'):(addTex+isok);
if(typeof (opts.chwarning) == 'function')
opts.chwarning(isok, ele, eve);
else{
alert(isok);
ele.select();
}
my.attr('form_check_submit',"0");
return false;
}else{
my.attr('form_check_submit',"1");
my.trigger('form_check_submit_ok');
if(typeof (opts.chright) == 'function')
return opts.chright();
else
return true;
}
});
}
function chright(El){
var rihtml = '<span class="form_check-result-chright"></span>';
var ele = _get_toele(El);
$(ele).show();
$(ele).html(rihtml);
}
function chwarning(msg, El){
var warhtml = '<span class="form_check-result-warning">'+msg+'</span>';
var ele = _get_toele(El);
$(ele).show();
$(ele).html(warhtml);
}
function _get_toele($this){
var toele;
//获取显示信息的节点
//信息显示在 warid属性的id上
if($this.is('[form_check-warid]'))
{
toele = $('#'+$this.attr('form_check-warid')).get(0);
}
//信息显示在 (下一个节点||下一个节点内)的属性checkspan=1的节点上
else if($this.next().find('*').andSelf().filter('[form_check-checkspan=1]').size()==1){
toele = $this.next().find('*').andSelf().filter('[form_check-checkspan=1]').get(0);
}
//信息显示在 id = form_check- + name属性
else if($this.is('[name]')&&$this.parents('form').eq(0).find('#form_check-'+$this.attr('name')).size()==1){
toele = $this.parents('form').eq(0).find('#form_check-'+$this.attr('name')).get(0);
}
//信息显示在添加一个 (下一个节点属性checkspan=1的节点)上
else{
var obj = $('<span form_check-checkspan="1" class="form_check-result"> </span>');
$this.after(obj);
toele = obj.get(0);
}
return toele;
}
return my;
};
//email 电子邮箱 校验函数
function chemail(msg, name){
if(typeof (name) == 'undefined')
name = '电子邮箱';
var ems = msg.search(/^[\w\-]+@[\w\-]+(\.[a-zA-Z]+)+$/g);
if(ems==-1)
return name+'格式有误';
else
return true;
}
//手机校验函数
function chmobile(msg, name){
if(typeof (name) == 'undefined')
name = '手机';
var ems = msg.search(/^1\d{10}$/g);
if(ems==-1)
return name+'格式有误';
else
return true;
}
//长度校验函数
function chlen(msg, minlen, maxlen, istrim){
if(typeof istrim == 'undefined')
istrim = true;
if(typeof minlen == 'undefined' || minlen == null || isNaN(minlen))
minlen = 1;
if(istrim)
msg = $.trim(msg);
if(typeof maxlen == 'undefined' || maxlen == null || isNaN(maxlen) || maxlen < minlen ){
if(msg.length < minlen)
return '内容长度不正确';
}else if(msg.length < minlen||msg.length > maxlen){
//return '内容长度必须大于' + (minlen - 1) + '小于' + (maxlen + 1); alert();
return '内容长度不正确';
}
return true;
}
//密码检验函数
function chpass(msg, name) {
if(typeof (name) == 'undefined')
name = '密码';
if(msg == '' || (/[\'\"\\]/).test(msg)) {
return name+'空或包含非法字符';
}
/*else if(msg.length < 6 || msg.length > 15){
return name+'长度必须是6-15位';
}*/
else if(!(/^\w{6,18}$/).test(msg)){
return name+'必须是英文字母数字下划线6-18位';
}
else {
return true;
}
}
//checked验证
function chchecked(ele){
if( ele.is(':checked'))
return true;
else
return '未选中';
}
//提供一个外部调用验证函数的接口
$.fn.form_check.callChFun = function(){
var nowFun = eval("ch"+arguments[0]);
var args = [];
for(var i = 1; i < arguments.length; i++){
args.push(arguments[i]);
}
return nowFun.apply(nowFun, args);
};
//外部可访问默认值
$.fn.form_check.defaults = {
chtype: 'focusout',
chright: '',
chwarning: ''
};
})(jQuery);
(function ($){
/*
* @name 自定义显示提示 v0.92 由于位置使用margin,fixed 所以最多兼容ie7 v0.92 - v0.93 修复一个遍历数组bug
* @desc 其中$(bgmask).data('myshow') 保存了所有这个bgmask的show节点,但是要判读现在是否属于它还需判断show节点的tobgmask属性是否是bgmask的bgmask属性!<br />
* @param $.bgmask.defaults <br />
* scroll是否开启滚动 默认关闭
* clickhide 是否点击bgmask关闭它,默认是
* clickremove 是否点击bgmask删除它,默认否
* show_site 显示的节点的位置 如果是字符串 top,center,left,right,bottom。 如果是对象参见$.bgmask._site函数 v1.0 默认center
* opacity bgmask的透明度,默认0.4
* backgroundColor bgmask的背景色,默认black
* myclass bgmask的class 默认bgmask
* shut_attr 显示节点内的关闭按钮的需要包含的属性 默认shut_bgmask 所有shut关闭按钮上的data('pshow')保存了它们所属show节点
* remove_attr 显示节点内的彻底关闭按钮(无法用open)的需要包含的属性 默认remove_bgmask 所有remove关闭按钮上的data('pshow')保存了它们所属show节点
* zIndex bgmask的z-index
* bgmaskid bgmask的bgmaskid,用来给使用者来识别它<br />
* 这些变量可以通过 $.bgmask.defaults 重新覆盖,而调用插件open函数时可以传options参数二次覆盖
* @param $.bgmask.allbg 保存了所有的bgmask包括关闭的 $.bgmask.allbg[$bgmask.attr('bgmask')]=$bgmask;
* @fun open函数 1.打开一个新的个bgmask, show Element|jQuery|string return $bgmask.attr('bgmask');<br />
* 2.重新打开已有bgmask open(attr) 如果 attr是#id即为bgmask属性 如果是字符##id即为bgmaskid属性 默认为最后一个新建的,以下等同
* @fun shut函数 关闭一个bgmask attr参数与open第二种一样,#..,##...
* @fun remove函数 彻底关闭一个bgmask(无法用open), attr参数同上, 其中is_retain_show参数为是否保留show节点,默认不保留
* @fun clear函数 清理bgmask上的show节点 attr参数与open第二种一样,#..,##...., is_retain_show 是否保存data里的show节点默认为不保存
* @author hank
*/
$.bgmask = {
defaults:{
scroll:false,
clickhide:true,
clickremove:false,
show_site:"center",
opacity : 0.4,
backgroundColor : "black",
myclass : "bgmask",
shut_attr:"shut_bgmask",
remove_attr:"remove_bgmask"
},
index:1,
max_zIndex:1000,
allbg:{},
open:function (show,options){
if(typeof show === 'undefined' && typeof options === 'undefined'){
return _reopen('#'+$('[bgmask]').last().attr('bgmask'));
}
if(typeof show == 'string' && show.charAt(0) == '#')
return _reopen(show);
var defaults = {
zIndex : $.bgmask.max_zIndex,
bgmaskid:$.bgmask.index
};
defaults = $.extend(defaults, $.bgmask.defaults);
var opts = $.extend(defaults, options);
var maskcss = {
zIndex : 1000,
backgroundColor : "black",
opacity : 0,
position : "fixed",
width : "100%",
height: "100%",
top : 0,
left : 0
};
maskcss = $.extend(maskcss, opts);
maskcss['filter'] = "alpha(opacity="+maskcss.opacity*100+")";
var $bgmask = $('<div bgmask="'+$.bgmask.index+'" bgmaskid="'+opts.bgmaskid+'"></div>');
$bgmask.attr('class',opts.myclass);
$bgmask.css(maskcss);
$('body').append($bgmask);
$bgmask.show();
if(opts.scroll === false){
var scroll_el_str = is_ie?'html':'body';
if($(scroll_el_str).css("overflow")!='hidden'){
$bgmask.attr('body_overflow',$(scroll_el_str).css("overflow"));
var oldwidth = $(scroll_el_str).width();
$(scroll_el_str).css("overflow", "hidden");
var scrollwidth = $(scroll_el_str).width() - oldwidth;
$bgmask.attr('body_scrollwidth',scrollwidth);
$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))+scrollwidth);
}
}
if(opts.clickremove === true){
$bgmask.bind("click.bgmask",function (){
$.bgmask.remove("#"+$(this).attr('bgmask'));
});
}
if(opts.clickhide === true){
$bgmask.bind("click.bgmask",function (){
$.bgmask.shut("#"+$(this).attr('bgmask'));
});
}
if(typeof show === 'undefined'){
show = $('<div>');
}
if (!(show instanceof jQuery)) {
try {
if (typeof show == 'string' || show instanceof Element) {
show = $(show);
}else{
show = $('<div>');
}
} catch (err) {
show = $(show);
}
}
var $show = show;
$show.css({
zIndex : parseInt($bgmask.css("zIndex"))+1
});
if($show.parent().size()==0){
$('body').append($show);
}
$show.show();
//show放到bgmask data里
if($bgmask.data('myshow') == undefined){
$bgmask.data('myshow',[$show]);
}else{
if ($show.attr('tobgmask') != $bgmask.attr('bgmask')) {
var oldatt = $bgmask.data('myshow');
oldatt = oldatt.push($show);
$bgmask.data('myshow', oldatt);
}
}
$show.attr('tobgmask',$bgmask.attr('bgmask'));
$allshut_el = $show.find('['+opts.shut_attr+']');
$allshut_el.data('pshow',$show);
$allshut_el.each(function (){
$(this).bind("click.bgmask",function (myeve){
var pshow = $(this).data('pshow');
$.bgmask.shut("#"+pshow.attr('tobgmask'));
myeve.preventDefault();
});
});
$allremove_el = $show.find('['+opts.remove_attr+']');
$allremove_el.data('pshow',$show);
$allremove_el.each(function (){
$(this).bind("click.bgmask",function (myeve){
var pshow = $(this).data('pshow');
$.bgmask.remove("#"+pshow.attr('tobgmask'));
myeve.preventDefault();
});
});
$.bgmask._site($show,opts.show_site);
//得到新的最高层
if(parseInt($bgmask.css("zIndex"))>=$.bgmask.max_zIndex)
$.bgmask.max_zIndex = parseInt($bgmask.css("zIndex"))+1;
$bgmask.data('opts',opts);
$.bgmask.allbg[$bgmask.attr('bgmask')]=$bgmask;
$.bgmask.index++;
return $bgmask.attr('bgmask');
},
/*
* show_site如果是对象 默认参数deopts = {fromjq:'',fromsite:{top:1,left:0},css:{}};
* fromjq 为jq节点或者节点,//$show相对于formjq的位置top,left 可以选值1,0,-1 ; css作为最后附加选项覆盖
*/
_site:function ($show,show_site){
//定位
if($show.size()<1)
return false;
$show.show();
//$show.offset({'left':$(window).width()/2,'top':$(window).height()/2});
if (typeof show_site == 'string') {
$show.css({"top":"50%",
"left":"50%",
position : "fixed",
"margin":0
});
switch (show_site) {
case "top":
$show.css("top", "0");
$show.css("margin-left", -($show.outerWidth()/2));
break;
case "left":
$show.css("left", "0");
$show.css("margin-top", -($show.outerHeight()/2));
break;
case "right":
$show.css("left", "100%");
$show.css("margin-left", -$show.outerWidth());
$show.css("margin-top", -($show.outerHeight()/2));
break;
case "bottom":
$show.css("top", "100%");
$show.css("margin-top", -$show.outerHeight());
$show.css("margin-left", -($show.outerWidth()/2));
break;
case "top,right":
$show.css("top", "0");
$show.css("left", "100%");
$show.css("margin-left", -$show.outerWidth());
break;
//默认居中
default:
$show.css("margin-left", -($show.outerWidth()/2));
$show.css("margin-top", -($show.outerHeight()/2));
}
} else if (typeof show_site == 'object') {
var deopts = {fromjq:'',
fromsite:{top:1,left:0},//$show相对于formjq的位置top,left 可以选值1,0,-1
css:{}
};
var opts = $.extend(deopts, show_site);
if(opts.fromjq != ''){
if(!(opts.fromjq instanceof jQuery)){
try {
if ((opts.fromjq instanceof Element)) {
opts.fromjq = $(opts.fromjq);
}else{
return false;
}
}catch(err){
return false;
}
}
if(opts.fromjq.size()<1)
return false;
$show.css({position:"absolute"
});
var offset = opts.fromjq.offset();
if(opts.fromsite.left == -1)
offset.left = offset.left-$show.outerWidth();
else
offset.left = offset.left+(opts.fromjq.outerWidth())*opts.fromsite.left;
if(opts.fromsite.top == -1)
offset.top = offset.top-$show.outerHeight();
else
offset.top = offset.top+(opts.fromjq.outerHeight())*opts.fromsite.top;
$show.offset({left:offset.left,top:offset.top});
}
$show.css(opts.css);
}
},
clear:function (attr, is_retain_show){
if(typeof is_retain_show === 'undefined')
is_retain_show = false;
var bgmasks = _getall_bgmask(attr);
for (var j=0;j<bgmasks.length;j++){
bgmask = bgmasks[j];
var bg = $('div[bgmask='+bgmask+']');
if(bg.size()<1)
continue;
var allshow = bg.data('myshow');
bgmask = bg.attr('bgmask');
if(typeof allshow == 'object'){
for(var i=0; i< allshow.length; i++){
if(allshow[i].attr('tobgmask') == bgmask){
if(is_retain_show === false)
allshow[i].removeAttr('tobgmask');
allshow[i].hide();
allshow[i].trigger('bgmask_hide');
}
}
}
if(is_retain_show === false)
bg.data('myshow',[]);
}
},
shut:function (attr){
var bgmasks = _getall_bgmask(attr);
for (var j=0;j<bgmasks.length;j++){
bgmask = bgmasks[j];
var bg = $('div[bgmask='+bgmask+']');
if(bg.size()<1)
continue;
if(bg.is(':hidden'))
continue;
if(typeof bg == 'object'){
$.bgmask.clear("#"+bg.attr('bgmask'), true);
bg.hide();
if(bg.attr('body_overflow') != undefined){
var scroll_el_str = is_ie?'html':'body';
$(scroll_el_str).css("overflow",bg.attr('body_overflow'));
var scrollwidth = bg.attr('body_scrollwidth');
$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))-scrollwidth);
}
bg.trigger('bgmask-shut');
}
}
},
remove:function (attr, is_retain_show){
if(typeof is_retain_show === 'undefined')
is_retain_show = false;
var bgmasks = _getall_bgmask(attr);
for (var j=0;j<bgmasks.length;j++){
bgmask = bgmasks[j];
var bg = $('div[bgmask='+bgmask+']');
if(bg.size()<1)
continue;
var allshow = bg.data('myshow');
bgmask = bg.attr('bgmask');
if(typeof allshow == 'object'){
for(var i=0; i< allshow.length; i++){
if(allshow[i].attr('tobgmask') == bgmask){
allshow[i].removeAttr('tobgmask');
if(is_retain_show === false){
allshow[i].trigger('bgmask_remove');
allshow[i].remove();
}
}
}
}
if(bg.attr('body_overflow') != undefined){
var scroll_el_str = is_ie?'html':'body';
$(scroll_el_str).css("overflow",bg.attr('body_overflow'));
var scrollwidth = bg.attr('body_scrollwidth');
$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))-scrollwidth);
}
bg.remove();
delete $.bgmask.allbg[bgmask];
bg.trigger('bgmask-remove');
}
}
};
var is_ie = !-[1,];
function _getall_bgmask(attr){
if(typeof attr == 'undefined')
attr = '#'+$('[bgmask]').last().attr('bgmask');
var bgmasks = [];
if(attr.indexOf('##')===0){
var bgmaskid = attr.slice(2);
var bg = $('div[bgmaskid='+bgmaskid+']');
bg.each(function (){
bgmasks.push($(this).attr('bgmask'));
});
}else if(attr.indexOf('#')===0){
bgmasks = [attr.slice(1)];
}else{
return [];
}
return bgmasks;
}
function _reopen(attr){
var bgmasks = _getall_bgmask(attr);
for(var i=0;i<bgmasks.length;i++){
var bgmask = bgmasks[i];
var bg = $('div[bgmask='+bgmask+']');
if(bg.size()<1)
continue;
var opts = bg.data('opts');
if(bg.is(':visible'))
continue;
bg.show();
//重新判断滚动
if(opts.scroll === false){
var scroll_el_str = is_ie?'html':'body';
if($(scroll_el_str).css("overflow")!='hidden'){
bg.attr('body_overflow',$(scroll_el_str).css("overflow"));
var oldwidth = $(scroll_el_str).width();
$(scroll_el_str).css("overflow", "hidden");
var scrollwidth = $(scroll_el_str).width() - oldwidth;
bg.attr('body_scrollwidth',scrollwidth);
$(scroll_el_str).css('paddingRight',parseInt($(scroll_el_str).css('paddingRight'))+scrollwidth);
}
}
var allshow = bg.data('myshow');
bgmask = bg.attr('bgmask');
if(typeof allshow == 'object'){
for(var j=0; j< allshow.length; j++){
if(allshow[j].attr('tobgmask') == bgmask){
allshow[j].show();
//重新定位
$.bgmask._site(allshow[j],opts.show_site);
}
}
}
}
}
})(jQuery);
(function ($){
/**
* @name 移动El v0.2
* @example $('移动控件').ElMove(需要移动的节点)
* @author hank
*/
$.fn.ElMove = function (PEl){
var my = $(this);
my.each(function (){
var now = $(this);
now.css({"cursor": "move"});
now.bind({"mousedown.ElMove":function (eve){
eve.preventDefault();
$(this).attr('is_elmove',"1");
},"mouseup.ElMove":function (){
$(this).attr('is_elmove',"0");
$(this).removeData('ElMove_pageXY');
},
"mousemove.ElMove":function (eve,myeve){
var moveMy = $(this);
if(!moveMy.is('[is_elmove="1"]'))
return;
if(typeof myeve !== 'undefined')
eve = myeve;
else
eve.stopPropagation();
var oldpageXY = moveMy.data('ElMove_pageXY');
var nowpageXY = {"X":eve.pageX,"Y":eve.pageY};
if(!oldpageXY){
oldpageXY = {"X":eve.pageX,"Y":eve.pageY};
}
var Mleft = nowpageXY.X - oldpageXY.X;
var Mtop = nowpageXY.Y - oldpageXY.Y;
moveMy.data('ElMove_pageXY',nowpageXY);
if(!PEl.is(':visible'))
return;
var nowOffset = PEl.offset();
if(PEl.css('position') == "fixed"){
PEl.css('position',"absolute");
PEl.offset(nowOffset);
}
PEl.offset({left:nowOffset.left+Mleft,top:nowOffset.top+Mtop});
if(Mleft != 0 || Mtop != 0)
PEl.trigger("ElMove");
},
"dragstart.ElMove":function (eve){
eve.preventDefault();
}
}).attr('data-Elmove-child','1');
});
PEl.attr('data-Elmove-parent','1');
return my;
};
$(function (){
$('body').bind({"mousemove.ElMove":function (eve){
var Elmove = $('[is_elmove="1"]');
if(Elmove.size() > 0)
Elmove.each(function (){
$(this).triggerHandler('mousemove.ElMove',eve);
});
},"mouseup.ElMove":function (){
$('[is_elmove="1"]').attr('is_elmove',"0").removeData('ElMove_pageXY');
},
"mouseleave.ElMove":function (){
//移出body是否取消
//$('[is_elmove=1]').attr('is_elmove',"0").removeData('ElMove_pageXY');
}
});
});
})(jQuery);
(function ($){
/**
* @name from的iframe提交 v0.1
* @desc 主要是考虑带file的from异步提交
* @param options
* success 成功调用函数 success(retex,toiframe);
* error 失败调用函数 error(toiframe);
* complete 完成调用函数 complete(toiframe,'success');
* isSubmit 是否自动提交,默认 false
* isOne 是否一次性, 默认 false
* @pending isAddDiscern 是否增加请求标识(默认iframe_async=1)如果是字符串添加此参数请求值为1
* @example $('form#file').form_iframe({success:function (retex){alert('提交成功,'+retex)}});
* @author hank
*/
$.fn.form_iframe = function (options){
var my = $(this);
var defaults = $.extend({}, $.fn.form_iframe.defaults);
var opts = $.extend(defaults, options);
my.each(function (){
var target, iframe_name, toiframe,
myform = $(this);
if(!myform.is('form'))
return true;
do{
iframe_name = 'iframe_'+((Math.random()*10000000000000000).toString()).slice(0,14);
}while($('iframe[name="'+iframe_name+'"]').size() > 0);
toiframe = $('<iframe form_iframe="1" name="'+iframe_name+'"></iframe>').hide();
myform.attr('target',iframe_name);
myform.after(toiframe);
myform.bind('submit',function (){
var subCou = (isNaN(parseInt($(this).attr('form_iframe-cou'))) ? 1 : (parseInt($(this).attr('form_iframe-cou'))+1));
$(this).attr('form_iframe-cou', subCou);
toiframe.attr('form_iframe-cou', subCou);
});
toiframe.data('myform',myform);
toiframe.bind({"error.form_iframe":function (){
if(!toiframe.is('[form_iframe-cou]')){
return;
}
opts.error(toiframe);
opts.complete(toiframe,'failure');
_my_complete(toiframe, 'failure');
},
"load.form_iframe":function (){
if(!toiframe.is('[form_iframe-cou]')){
return;
}
var retdom = $(this).contents(),
retex = $(retdom).text();
opts.success(retex,toiframe);
opts.complete(toiframe,'success', retex);
_my_complete(toiframe, 'success');
}});
if(opts.isSubmit)
myform.submit();
});
function _my_complete(iframe){
if(opts.isOne)
iframe.remove();
}
return my;
};
$.fn.form_iframe.defaults = {
success: function (){},
error: function (){},
complete:function (){},
isSubmit:false,
isOne:false
};
})(jQuery);
(function ($){
/**
* @name 标签切换 v0.1
* @desc 标签切换
* @param options
* $() TagEl 操作切换的Els 默认切换到 eq = my.index()的showEl 可选参数 switchtag_eg 如果是数组表示切换到 第eq个showEl 否则是showEl的选择器
* autoHide 是否自动隐藏
* deEq 默认显示第几个节点,配合自动隐藏使用
* showEl 被切换的节点,可以是 选择器,或者jqEls
* PEl 可选的父节点 如果 showEl为 选择器时生效
* CClass 选择后的节点class
* eveType 激活切换的事件
* SBefore 切换之前调用函数 如果返回false取消切换 传递参数 nowTagEl,nowShowEl,allTagEl,allShowEl
* SAfter 切换之后调用函数 传递参数 nowTagEl,nowShowEl,allTagEl,allShowEl
* @example
* @author hank
*/
$.fn.switchTag = function (options){
var my = $(this);
var defaults = $.extend({}, $.fn.switchTag.defaults);
var opts = $.extend(defaults, options);
var eveType = opts.eveType+'.switchTag';
my.bind(eveType, function (eve){
var nowEl = $(this), nowEq = nowEl.attr('switchtag_eg'),
allShowEl = __getAllShowEl(),
nowEqS, nowShowEl;
eve.preventDefault();
if(nowEq){
//为数字
if((parseInt(nowEq)).toString() == nowEq)
nowEqS = ':eq('+nowEq+')';
else
nowEqS = nowEq;
}else{
nowEqS = ':eq('+nowEl.index()+')';
}
nowShowEl = allShowEl.filter(nowEqS);
if(opts.SBefore(nowEl,nowShowEl,my,allShowEl) === false)
return;
nowShowEl.show();
allShowEl.filter(":not("+nowEqS+")").hide();
my.removeClass(opts.CClass).attr('switchTag','0');
nowEl.addClass(opts.CClass).attr('switchTag','1');
opts.SAfter(nowEl,nowShowEl,my,allShowEl);
}).attr('switchTag','0');
if(opts.autoHide){
my.filter(":eq("+opts.deEq+")").trigger(eveType);
}
function __getAllShowEl(){
var allShowEl;
if(typeof opts.showEl === 'string'){
allShowEl = opts.PEl.find(opts.showEl);
}else{
allShowEl = opts.showEl;
}
return allShowEl;
}
return my;
};
$.fn.switchTag.defaults = {
autoHide: false,
deEq: 0,
showEl:'',
PEl:$('body'),
CClass:'checked_tag',
eveType:'click',
SBefore:function (){},
SAfter:function (){}
};
})(jQuery);
(function ($){
/**
* @name 轮播v0.1
* @param options
viewEl: '.viwepager', 视窗选择器 !css overflow: hidden;font-size: 0;!
onceNum: 1, 每一个屏几个item
marginR: 2, 每个item的右边间隔
deNum:1, 默认初始到第几个
allItemEl: '.allitem', 包住所有itme的节点选择器
itemEl: '.item', itme 选选择器
toNumEve: 'click', 切到指定位置的El的触发事件类型
Mswipe:false, 是否支持jqmbile 的swipe事件
autoSwit:false, 自动切换的毫秒数,只有大于0会启动
isLoop:false 是否循环,到最后一个切到第一个
switContainEl.data('carousel-SetInterval') 绑定了int 可手动关闭;
attrs 一下属性标记节点类型
[last] 切换到上个的节点
[next] 切换到下个
[tonum] 切到指定位置的El模版的包含节点
[tonum-one] 切到指定位置的El模版 (!num! 可以替换 位置num)
(switContainEl.data('carousel-ReSet'))(NowToNum,NowOnceNum); 绑定了重置的函数
switContainEl.data('carousel-SwitItem',switItem); 绑定了切换函数的函数
switItem(side, is_animate, isLoop) side = next | last | num
* @example
<div class="swit-contain">
<div class="viwepager">
<div class="allitem">
<div class="item"><img src="XXXX" /></div>
</div>
</div>
<a class="last" last>last</a>
<a class="next" next>next</a>
<div class="tonum_p">
<div class="tonum" tonum><a class="tonum-one" tonum-one>!num!</a></div>
</div>
</div>
* @prompt css约束请自行添加
* @author hank
*/
$.fn.carousel = function (options){
var my = $(this);
var defaults = $.extend({}, $.fn.carousel.defaults);
var opts = $.extend(defaults, options);
my.each(function (){
var switContainEl = $(this);
var viewEl = switContainEl.find(opts.viewEl);
var w;
var num = opts.onceNum;
var marginR = opts.marginR;
var oneW;
var deNum = opts.deNum;
var sum;
var screenSum;
viewEl.data('carousel-num',0);
viewEl.find(opts.allItemEl).width((sum*(oneW+marginR))+5);
viewEl.find(opts.itemEl).width(oneW).css('margin-right',marginR);
switContainEl.data('carousel-opt',{screenSum:screenSum,w:w});
switContainEl.data('carousel-extopt',opts);
switContainEl.data('carousel-ReSet',function (NowToNum,NowOnceNum){
if(typeof NowOnceNum !== 'undefined'){
num = NowOnceNum;
}
if(typeof NowToNum === 'undefined'){
NowToNum = 1;
}
w = viewEl.width();
oneW = (w-((num-1)*marginR))/num;
sum = viewEl.find(opts.itemEl).size();
screenSum = parseInt((sum%num != 0)? sum/num+1 : sum/num);
viewEl.data('carousel-num',0);
viewEl.find(opts.allItemEl).width((sum*(oneW+marginR))+5);
viewEl.find(opts.itemEl).width(oneW).css('margin-right',marginR);
switContainEl.data('carousel-opt',{screenSum:screenSum,w:w,marginR:marginR});
//初始化toNum按钮
switContainEl.find('[tonum]').each(function (){
var my = $(this);
var oneMb = my.data('carousel-onemb');
if(!oneMb){
oneMb = my.find('[tonum-one]');
oneMb.remove();
my.data('carousel-onemb',oneMb);
}
my.empty();
for(var i = 0;i < screenSum; i++ ){
var nowEl = oneMb.clone();
nowEl.html((nowEl.html()).replace(/!num!/g,i+1));
nowEl.attr('data-carousel-tonum',i+1);
my.append(nowEl);
}
});
switItem(NowToNum, false);
});
(switContainEl.data('carousel-ReSet'))(deNum);
if(opts.autoSwit > 0){
var tempFun = _getTempFun();
window[tempFun] = function (){
if(switContainEl.is(':hidden'))
return;
switItem('next',undefined,true);
};
switContainEl.data('carousel-SetInterval', setInterval('window.'+tempFun+'()',opts.autoSwit));
}
//左右切换按钮
switContainEl.find('[last]').click(function (){
switItem('last');
});
switContainEl.find('[next]').click(function (){
switItem('next');
});
switContainEl.on(opts.toNumEve+'.carousel','[data-carousel-tonum]',function (){
switItem($(this).data('carousel-tonum'));
});
//jqmobile 手机滑动
if(opts.Mswipe){
viewEl.bind('swipeleft swiperight',function (eve){
var isOk = false;
if(eve.type === "swipeleft"){
isOk = switItem('next');
}else{
isOk = switItem('last');
}
if(isOk !== false){
eve.stopPropagation();
eve.preventDefault();
}
});
}
function switItem(side, is_animate, isLoop){
var NowOpt = switContainEl.data('carousel-opt');
if(viewEl.data('carousel-animating') == '1'){
return 'carousel-animating';
}
var allEl = viewEl.find(opts.allItemEl),
nowScreen = parseInt(viewEl.data('carousel-num')),
toLeft;
//变量默认值
if(typeof side === 'undefined'){
side = 'next';
}
if(typeof is_animate === 'undefined'){
is_animate = true;
}
if(typeof isLoop === 'undefined'){
isLoop = opts.isLoop;
}
if(side == 'next'){
side = nowScreen + 1;
}else if(side == 'last'){
side = nowScreen - 1;
}
if (typeof side === 'number'){
side = parseInt(side);
if(0< side && side <= NowOpt.screenSum && side != nowScreen){
toLeft = -((side-1) * (NowOpt.w+NowOpt.marginR));
viewEl.data('carousel-num',side);
viewEl.data('carousel-animating','1');
if(is_animate){
allEl.animate({left:toLeft},function (){viewEl.data('carousel-animating','0');});
}else{
allEl.css({left:toLeft});
viewEl.data('carousel-animating','0');
}
//处理next last按钮
switContainEl.find('[last]').show();
switContainEl.find('[next]').show();
if(side == 1){
switContainEl.find('[last]').hide();
}else if(side == NowOpt.screenSum){
switContainEl.find('[next]').hide();
}
//处理toNum
switContainEl.find('[tonum]').each(function (){
var my = $(this);
my.find('[tonum-one]:not([data-carousel-tonum="'+side+'"])').removeClass('now');
my.find('[tonum-one][data-carousel-tonum="'+side+'"]').addClass('now');
});
return true;
}else if(side > NowOpt.screenSum && isLoop){
switItem(1);
}
}
return false;
}
switContainEl.data('carousel-SwitItem',switItem);
});
return my;
};
$.fn.carousel.defaults = {
viewEl: '.viwepager',
onceNum: 1,
marginR: 2,
deNum:1,
allItemEl: '.allitem',
itemEl: '.item',
toNumEve: 'click',
Mswipe:false,
autoSwit:false,
isLoop:false
};
//获得临时全局函数
_getTempFun = function (){
var tempfun = "_jstempfun_"+((Math.random()*10000000000000000).toString()).slice(0,14);
while(typeof window[tempfun] !== 'undefined'){
tempfun = "_jstempfun_"+((Math.random()*10000000000000000).toString()).slice(0,14);
}
window[tempfun] = function (){};
return tempfun;
};
})(jQuery);
网友评论