省市区三级菜单联动插件,全屏网格折叠动画插件

前言

这里分享三个博主写的省市区三级菜单联合浮动插件 —
jQuery-Citys,此插件中具有省市区数量均为国家行政区划代码,保险数据真实可靠,插件能够依据默许地区代码或地面称号举行值的初阶化操作。

线上演示地址:
github地址:
备用地址
ps:github地址有代码演示,以及插件源码可供参考,线上演示地址可供预览。
演示截图(查看演示效果请点击上方链接):

澳门葡京 1

前言

省市区三级菜单联动插件,全屏网格折叠动画插件。Duang,Duang,Duang,博主又来享受插件了,这一次是贰个绚烂的网格折叠动画效果,其规律模拟纸板折叠进程的卡通片,页面使用了汪洋CSS三属性,具体职能请看演示页面(建议使用新版谷歌(Google)、火狐浏览器观望,对于ie玖以下不援助CSS三属性的浏览器分化盟)。

博主个人提议:那一个效果能够用于网站携带用户打开操作,大概在页面能源加载较多时作为音信呈现页面使用。

线上演示地址:

github地址:
ps:github地址有代码演示,以及插件源码可供参考,线上演示地址可供预览。

澳门葡京 2

前言

Duang,Duang,Duang,博主又来分享插件了,此次是三个光彩夺目的网格折叠动画效果,其规律模拟纸板折叠进度的卡通,页面使用了大气CSS3属性,具体效果请看演示页面(提出采纳新版谷歌(谷歌)、火狐浏览器观望,对于ie九以下不帮衬CSS3属性的浏览器不相配)。

澳门葡京 ,博主个人建议:那个效应能够用于网址带领用户张开操作,恐怕在页面财富加载较多时作为新闻展现页面使用。

线上演示地址:

github地址:
ps:github地址有代码演示,以及插件源码可供参考,线上演示地址可供预览。

澳门葡京 3

插件逻辑

其一插件的逻辑重倘诺依照区划代码来实行省市区的筛选以及分类,因为区划代码的奇怪排序博主在当中使用了有个别正则来划分分裂的省区以及地区,然后通过对三级菜单绑定差别的风云来响应省市区转换的联合浮动作效果应。

插件逻辑

浅析那么些插件逻辑在此以前,先说一下降到实处动画效果的CSS叁属性:transform-origin。那特性情主要用以安装旋转成分的主体地方,正是用来转移网格翻转时器重,因为默许网格翻转是以网格中心点为主体进行翻转,那样的卡通片效果不符合大家预料。下边那张图差不多批注了弹指间transform-origin属性合营rotate属性实现网格翻转动画的原理。
澳门葡京 4

在那张图里,你会看出种种网格对应3个数字,那是有利于清楚全部网格区域与窗口体现区域的涉及。全体网格容器是由叁十七个网格组成,壹共分为三排,每排11个。在大家的可视区域内,借使不算上荧屏两边的半个网格区域,一共有多少个网格,全体还有四个网格(包含未出示完整的网格)未出示。能够依赖序号得出左侧有1个网格(0、一、二),右侧有三个网格(九、10)隐藏了。

ps:这里的序号对应每一个网格排列的序号(从 0 开头图谋)

下边是表达动画的长河:
澳门葡京 5
澳门葡京 6
澳门葡京 7

从这里能够观测出,每排的网格都会稳步向主导折叠,这里的着力成分分别对应序号伍(第5个网格)、16(第二7个网格)、二7(第二七个网格)。当第二排和第一排网格都折叠实现时,第贰排网格和第贰排网格(五、二7)朝向网格1六折叠,最终网格1陆的原点基于大旨的进展折叠。那就是具备网格动画的1个完好的实行进程。

插件逻辑

分析那个插件逻辑在此以前,先说一下贯彻动画效果的CSS3属性:transform-origin。这些性情主要用于安装旋转成分的本位地点,就是用来转移网格翻转时核心,因为默许网格翻转是以网格中央点为基点实行翻转,这样的动画效果不吻合我们预料。上边那张图大约解说了1晃transform-origin属性合营rotate属性达成网格翻转动画的规律。
澳门葡京 8

在那张图里,你会面到各样网格对应1个数字,那是方便清楚全部网格区域与窗口呈现区域的涉及。全部网格容器是由三拾八个网格组成,一共分为3排,每排拾二个。在大家的可视区域内,假诺不算上显示屏两边的半个网格区域,1共有伍个网格,全数还有陆个网格(包罗未展现完整的网格)未出示。能够依靠序号得出右边有二个网格(0、一、2),左边有一个网格(九、10)隐藏了。

ps:这里的序号对应每种网格排列的序号(从 0 早先预计)

上边是演讲动画的经过:
澳门葡京 9
澳门葡京 10
澳门葡京 11

从此处能够考查出,每排的网格都会日渐向骨干折叠,这里的主干成分分别对应序号5(第多少个网格)、1陆(第一捌个网格)、27(第三九个网格)。当第二排和第2排网格都折叠达成时,第壹排网格和第一排网格(5、2七)朝向网格16折叠,最后网格1陆的原点基于中央的实行折叠。那正是兼备网格动画的3个完全的推行进程。

源码解析

此地只展现部分连锁源码,更多源码能够访问博主的github地址实行下载查看。
率先是概念各式参数:

var _options = $.extend({
    url : 'js/jquery-citys.json',         //省市区json数据地址
    patternPro : /\d{2}0000/,             //初始化正则匹配省数据
    patternCity : /1101\d{2}/,            //初始化正则匹配市数据
    type : 'code',                        //下拉框值的类型,code行政区划代码,name地名
    code: 0,                              //地区编码
    province : '',                        //省份(省级),可以为地区编码或者名称
    city : '',                            //城市(地级),可以为地区编码或者名称
    area : '',                            //地区(县区级),可以为地区编码或者名
    selState : 0,                         //联动级别判断值,二级联动状态值为0,三级为1
    selProvince : "province",             //省份、直辖市列表框name
    selCity : "city",                     //城市、区列表框name
    selArea : "area",                     //区、县列表框name
}, options);
var proHtml = '',                         //省份html数据
    cityHtml = '',                        //城市html数据
    areaHtml = '',                        //地区html数据
    _this = $(this),                      //指向调用插件对象
    citys = '',                           //省市区json数据
    patternPro = _options.patternPro,     //初始化正则匹配省数据
    patternCity = _options.patternCity,   //初始化正则匹配市数据
    type = _options.type,                 //下拉框值的类型,code行政区划代码,name地名
    code = _options.code,                 //地区编码
    province = _options.province,         //省份(省级),可以为地区编码或者名称
    city = _options.city,                 //城市(地级),可以为地区编码或者名称
    area = _options.area,                 //地区(县区级),可以为地区编码或者名
    selState = _options.selState,         //联动级别判断值,二级联动状态值为0,三级为1
    $selProvince =  _this.find('select[name="'+ _options.selProvince +'"]'),  //省份、直辖市列表框name
    $selCity =  _this.find('select[name="'+ _options.selCity +'"]'),          //城市、区列表框name
    $selArea = _this.find('select[name="'+ _options.selArea +'"]');           //区、县列表框name

赢得省市区json数据:

$.getJSON(_options.url,function(data){
  citys = data;
  //执行初始化命令
  init();
})

开端化命令:

var init = function(){
  //初始化默认数据                 
  proHtml = "<option> - 请选择 - </option>";
  cityHtml = "<option> - 请选择 - </option>";                  
  for(var i in citys){
    if(patternPro.test(i)){ //添加一级列表数据
      proHtml += "<option value='"+(type=="code"?i:citys[i])+"' data-code='"+ i +"'>"+ citys[i] +"</option>";
    }
  }
  //渲染省份一级列表
  $selProvince.html(proHtml);
  //渲染城市二级列表
  $selCity.html(cityHtml);
  //默认隐藏区三级列表
  $selArea.hide();
  //填写地区编码时,利用编码定位
  if(type == 'code' && code){
    var c = code - code%1e4;
    province = c;
    c = code - (code%1e4 ? code%1e2 : code);
    city = c;
    c = code%1e2 ? code : 0;
    area = c;
  }
  //添加默认初始值
  $selProvince.find('option').each(function(){
    if(type == 'code' && province != ''){
      if(province == $(this).data('code')){
        $(this).attr('selected',true);
        changeProvince($(this).data('code'));
      }
    }else if(type == 'name' && province != ''){
      if(province == $(this).val()){
        $(this).attr('selected',true);
        changeProvince($(this).data('code'));
      }
    }
  })
  $selCity.find('option').each(function(){
    if(type == 'code' && city != ''){
      if(city == $(this).data('code')){
        $(this).attr('selected',true);
        changeCity($(this).data('code'));
      }
    }else if(type == 'name' && city != ''){
      if(city == $(this).val()){
        $(this).attr('selected',true);
        changeCity($(this).data('code'));
      }
    }
  })
  $selArea.find('option').each(function(){ 
    //三级联动时,匹配对应地区
    if(selState == 1){ 
      if(type == 'code' && area != ''){
        if(area == $(this).data('code')){
          $(this).attr('selected',true);
        }
      }else if(type == 'name' && area != ''){
        if(area == $(this).val()){
          $(this).attr('selected',true);
        }
      }
    }
  })
}

小编: 弦云孤赫 原版的书文链接:

正文能够转发,但必须申明最初的著作者和原出处。

源码解析

下边展示一下源码:

//定义基础变量,以及插件api
var _ops = $.extend({
    shadeTime: 1000, //遮罩层遮挡网格时长
    flodTime: 1000, //初始化页面执行网格折叠动画的延迟时长
    showBtnTime: 4500, //折叠动画开始至显示按钮的延迟时长
    loading_zzc: 'loading_zzc', //遮罩层的class
    loading_btns: 'loading_btns', //网格动画控制按钮的class
    btn_logo: 'btn_logo', //网格动画控制按钮子元素的class
    preloader: 'preloader', //网格容器的class
    square_box: 'square_box', //网格容器子元素的class
    square: 'square' //网格的class
}, options);
var $this = $(this),
    _shadeTime = _ops.shadeTime, //遮罩层遮挡网格时长
    _flodTime = _ops.flodTime, //初始化页面执行网格折叠动画的延迟时长
    _showBtnTime = _ops.showBtnTime, //折叠动画开始至显示按钮的延迟时长
    _loading_zzc = _ops.loading_zzc, //遮罩层的class
    _loading_btns = _ops.loading_btns, //网格动画控制按钮的class
    _btn_logo = _ops.btn_logo, //网格动画控制按钮子元素的class
    _preloader = _ops.preloader, //网格容器的class
    _square_box = _ops.square_box, //网格容器子元素的class
    _square = _ops.square; //网格的class

以下是关于网格折叠动画的代码:

var p = 'perspective(600px)'; //定义 3D 元素距视图的距离
for(var i=0;i<5;i++){
  $('.'+_square).eq(i).css({'transform':p+' rotateY(-90deg)','transition-delay':(i+1)*0.3+'s'});
}
for(var j=11;j>5;j--){
  $('.'+_square).eq(j).css({'transform':p+' rotateY(90deg)','transition-delay':(11-j)*0.3+'s'});
}
for(var k=12;k<16;k++){
  $('.'+_square).eq(k).css({'transform':p+' rotateY(-90deg)','transition-delay':(k-9)*0.3+'s'});
}
for(var m=22;m>16;m--){
  $('.'+_square).eq(m).css({'transform':p+' rotateY(90deg)','transition-delay':(23-m)*0.3+'s'});
}
for(var s=23;s<27;s++){
  $('.'+_square).eq(s).css({'transform':p+' rotateY(-90deg)','transition-delay':(s-19)*0.3+'s'});
}
for(var g=33;g>27;g--){
  $('.'+_square).eq(g).css({'transform':p+' rotateY(90deg)','transition-delay':(35-g)*0.3+'s'});
}
$('.'+_square).eq(5).css({'transform':p+' rotateX(90deg)','transition-delay':'2.4s'});
$('.'+_square).eq(27).css({'transform':p+' rotateX(-90deg)','transition-delay':'2.7s'});
$('.'+_square).eq(16).css({'transform':p+' rotateX(90deg)','transition-delay':'3.2s'});

以下是关于网格进行动画的代码:

var p = 'perspective(600px)'; //定义 3D 元素距视图的距离
for(var i=4;i>-1;i--){
  $('.'+_square).eq(i).css({'transform':p+' rotateY(0deg)','transition-delay':(9-i)*0.3+'s'});
}
for(var j=6;j<12;j++){
  $('.'+_square).eq(j).css({'transform':p+' rotateY(0deg)','transition-delay':(j-1)*0.3+'s'});
}
for(var k=15;k>11;k--){
  $('.'+_square).eq(k).css({'transform':p+' rotateY(0deg)','transition-delay':(19-k)*0.3+'s'});
}
for(var m=17;m<23;m++){
  $('.'+_square).eq(m).css({'transform':p+' rotateY(0deg)','transition-delay':(m-13)*0.3+'s'});
}
for(var s=26;s>22;s--){
  $('.'+_square).eq(s).css({'transform':p+' rotateY(0deg)','transition-delay':(29-s)*0.3+'s'});
}
for(var g=28;g<34;g++){
  $('.'+_square).eq(g).css({'transform':p+' rotateY(0deg)','transition-delay':(g-25)*0.3+'s'});
}
$('.'+_square).eq(5).css({'transform':p+' rotateX(0deg)','transition-delay':'0.6s'});
$('.'+_square).eq(27).css({'transform':p+' rotateX(0deg)','transition-delay':'0.3s'});
$('.'+_square).eq(16).css({'transform':p+' rotateX(0deg)','transition-delay':'0s'});

本插件的完整源码,能够访问github地址:。

小编: 弦云孤赫 原著链接:

本文能够转发,但必须表明原文者和原出处。

源码解析

下边体现一下源码:

//定义基础变量,以及插件api
var _ops = $.extend({
    shadeTime: 1000, //遮罩层遮挡网格时长
    flodTime: 1000, //初始化页面执行网格折叠动画的延迟时长
    showBtnTime: 4500, //折叠动画开始至显示按钮的延迟时长
    loading_zzc: 'loading_zzc', //遮罩层的class
    loading_btns: 'loading_btns', //网格动画控制按钮的class
    btn_logo: 'btn_logo', //网格动画控制按钮子元素的class
    preloader: 'preloader', //网格容器的class
    square_box: 'square_box', //网格容器子元素的class
    square: 'square' //网格的class
}, options);
var $this = $(this),
    _shadeTime = _ops.shadeTime, //遮罩层遮挡网格时长
    _flodTime = _ops.flodTime, //初始化页面执行网格折叠动画的延迟时长
    _showBtnTime = _ops.showBtnTime, //折叠动画开始至显示按钮的延迟时长
    _loading_zzc = _ops.loading_zzc, //遮罩层的class
    _loading_btns = _ops.loading_btns, //网格动画控制按钮的class
    _btn_logo = _ops.btn_logo, //网格动画控制按钮子元素的class
    _preloader = _ops.preloader, //网格容器的class
    _square_box = _ops.square_box, //网格容器子元素的class
    _square = _ops.square; //网格的class

以下是关于网格折叠动画的代码:

var p = 'perspective(600px)'; //定义 3D 元素距视图的距离
for(var i=0;i<5;i++){
  $('.'+_square).eq(i).css({'transform':p+' rotateY(-90deg)','transition-delay':(i+1)*0.3+'s'});
}
for(var j=11;j>5;j--){
  $('.'+_square).eq(j).css({'transform':p+' rotateY(90deg)','transition-delay':(11-j)*0.3+'s'});
}
for(var k=12;k<16;k++){
  $('.'+_square).eq(k).css({'transform':p+' rotateY(-90deg)','transition-delay':(k-9)*0.3+'s'});
}
for(var m=22;m>16;m--){
  $('.'+_square).eq(m).css({'transform':p+' rotateY(90deg)','transition-delay':(23-m)*0.3+'s'});
}
for(var s=23;s<27;s++){
  $('.'+_square).eq(s).css({'transform':p+' rotateY(-90deg)','transition-delay':(s-19)*0.3+'s'});
}
for(var g=33;g>27;g--){
  $('.'+_square).eq(g).css({'transform':p+' rotateY(90deg)','transition-delay':(35-g)*0.3+'s'});
}
$('.'+_square).eq(5).css({'transform':p+' rotateX(90deg)','transition-delay':'2.4s'});
$('.'+_square).eq(27).css({'transform':p+' rotateX(-90deg)','transition-delay':'2.7s'});
$('.'+_square).eq(16).css({'transform':p+' rotateX(90deg)','transition-delay':'3.2s'});

以下是有关网格开始展览动画的代码:

var p = 'perspective(600px)'; //定义 3D 元素距视图的距离
for(var i=4;i>-1;i--){
  $('.'+_square).eq(i).css({'transform':p+' rotateY(0deg)','transition-delay':(9-i)*0.3+'s'});
}
for(var j=6;j<12;j++){
  $('.'+_square).eq(j).css({'transform':p+' rotateY(0deg)','transition-delay':(j-1)*0.3+'s'});
}
for(var k=15;k>11;k--){
  $('.'+_square).eq(k).css({'transform':p+' rotateY(0deg)','transition-delay':(19-k)*0.3+'s'});
}
for(var m=17;m<23;m++){
  $('.'+_square).eq(m).css({'transform':p+' rotateY(0deg)','transition-delay':(m-13)*0.3+'s'});
}
for(var s=26;s>22;s--){
  $('.'+_square).eq(s).css({'transform':p+' rotateY(0deg)','transition-delay':(29-s)*0.3+'s'});
}
for(var g=28;g<34;g++){
  $('.'+_square).eq(g).css({'transform':p+' rotateY(0deg)','transition-delay':(g-25)*0.3+'s'});
}
$('.'+_square).eq(5).css({'transform':p+' rotateX(0deg)','transition-delay':'0.6s'});
$('.'+_square).eq(27).css({'transform':p+' rotateX(0deg)','transition-delay':'0.3s'});
$('.'+_square).eq(16).css({'transform':p+' rotateX(0deg)','transition-delay':'0s'});

本插件的完好源码,能够访问github地址:。

我: 弦云孤赫 原作链接:

本文能够转载,但必须申明原来的著我和原出处。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website