JQuery向导插件Step——第一个阉割版插件

如果使用过JQuery Steps的朋友一定会发现这个插件有一个缺点,就是页面在第一次进入的时候,会进行一次很明显的DOM重绘——页面会闪一下。
尤其是前端代码比较庞大的时候,效果更为明显。

为了解决这个问题,就想使用点轻量级的流程向导。于是网上搜了下,恰好园友有这样一个插件,感谢杨元

不过使用起来还是有点不太喜欢的地方:

  • 1 tooltip样式比较简陋,不好看.
  • 2 间距太窄了,没有响应式.
  • 3 缺少一些上一步下一步的触发动作以及校验.

因此就根据ystep的源码以及JQuery.steps的流程,设计出了下面的插件。虽然使用上还不是完善,但是基本已经能满足JQuery.steps的要求了。

为什么说阉割版呢!主要是因为是从别人的代码上阉割下来的,所以再次对原作者表示感谢!

无图无真相:

喜欢的朋友,可以在github上找到代码,猛戳这里就行!

ystep浅谈

于是首先先阅读了下杨元朋友的源码,去掉了tooltip,代码一下子少了很多。

主要的结构如下

(function($){
  $.fn.extend({
    //初始化
    loadStep: function(params){},
    //跳转到指定步骤
    setStep: function(step) {},
    //获取当前步骤
    getStep: function() {},
    //下一个步骤
    nextStep: function() {},
    //上一个步骤
    prevStep: function() {},
    //通用节点查找
    _searchStep: function (callback) {}
  });
})(jQuery);

原理可以参考下面的图:

说白了就是一些仅显示为圆圈的LI元素,加上一个进度条。
进度条会按照当前索引的位置,显示进度!

源码修改

这里没有在计算的过程中去增加响应式,而是直接使用@media设置样式。这样方便使用的时候根据当前页面的流程节点的个数进行设置宽度。

@media (min-width: 1200px) {
  /*调节总的宽度*/
  .ystep-lg {
    width: 800px;
  }
  /*调节进度条宽度*/
  .ystep-lg .ystep-progress, .ystep-lg .ystep-progress-bar {
    width: 600px;
  }
  /*调节各个原点之间的跨度*/
  .ystep-lg li {
    margin-right: 100px;
  }
  /*调节按钮位置*/
  .step-button{
    left: 800px;
  }
}

在原有的基础上增加按钮以及校验代码:

loadStep: function(params){

      //基础框架
      var baseHtml =  "<div class='ystep-container ystep-lg ystep-blue'>"+
                        "<ul class='ystep-container-steps'></ul>"+
                        "<div class='ystep-progress'>"+
                          "<p class='ystep-progress-bar'><span class='ystep-progress-highlight' style='width:0%'></span></p>"+
                        "</div>"+

                      "</div>";
      //步骤框架
      var stepHtml = "<li class='ystep-step ystep-step-undone'></li>";
      var stepButtonHtml = "<div class='step-button'><button type='button' class='btn btn-default prevBtn' id='prevBtn'>上一步</button>"+
                        "<button type='button' class='btn btn-default nextBtn' id='nextBtn'>下一步</button></div>";

      //支持填充多个步骤容器
      $(this).each(function(i,n){
        var $baseHtml = $(baseHtml),
        $stepHtml = $(stepHtml),
        $ystepContainerSteps = $baseHtml.find(".ystep-container-steps"),
        arrayLength = 0,
        $n = $(n),
        i=0;

        //步骤
        arrayLength = params.steps.length;
        for(i=0;i<arrayLength;i++){
          var _s = params.steps[i];
          //构造步骤html
          $stepHtml.text(_s);
          //将步骤插入到步骤列表中
          $ystepContainerSteps.append($stepHtml);
          //重置步骤
          $stepHtml = $(stepHtml);
        }

        var $stepButtonHtml = $(stepButtonHtml);
        $ystepContainerSteps.append($stepButtonHtml);

        //插入到容器中
        $n.append($baseHtml);

        //绑定两个按钮
        $("#prevBtn").click(function(){
          var index = $n.getStep();
          $n.prevStep();
          params.afterChange(index-1,index);
        });

        $("#nextBtn").click(function(){
          var index = $n.getStep();
          if(!params.beforeChange(index,index+1)){
            return;
          }
          $n.nextStep();
          params.afterChange(index+1,index);
        });

        //默认执行第一个步骤
        $n.setStep(1);
      });
    },

由于去除了一些不使用的参数,这样修改后,页面使用的时候直接绑定三个变量就可以了:

$(".ystep").loadStep({
      steps:["发起","审核","募款","执行"],
      beforeChange: function(nowIndex,nextIndex){},
      afterChange: function(nowIndex,prevIndex){}
});

使用帮助

首先,需要引入github中的JS以及CSS等文件,并添加页面元素,使用class="ystep"进行标识。

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/ystep.css">
  </head>
  <body>
  <!-- ystep容器 -->
  <div class="ystep"></div>

  <!-- 引入jquery -->
  <script src="js/jquery.min.js"></script>
  <!-- 引入bootstrap -->
  <script src="js/bootstrap.min.js"></script>
  <!-- 引入ystep插件 -->
  <script src="js/ystep.js"></script>
  </body>
</html>

其次,在页面底部增加初始化:

    $(".ystep").loadStep({
      steps:["发起","审核","募款","执行"],
      beforeChange: function(nowIndex,nextIndex){
        console.log("跳转前校验:"+nowIndex +" "+nextIndex);

        if(nowIndex === 1 && nextIndex === 2 ){
          return true;
        }else if(nowIndex === 2 && nextIndex === 3){
          return true;
        }else if(nowIndex === 3 && nextIndex === 4){
          return true;
        }
        return true;
      },
      afterChange: function(nowIndex,prevIndex){
        console.log("跳转后动作:"+nowIndex +" "+prevIndex);

        if(nowIndex <1 || nowIndex >5) return;

        /*这里可以搭配其他的页面元素,实现tab页切换的效果
        for(var i = 1; i <= 5; i++){
          if(i === nowIndex){
            $("#page"+i).css("display","block");
          }else{
            $("#page"+i).css("display","none");
          }
        }*/

        if(nowIndex === 2 && prevIndex === 1){

        }else if(nowIndex === 3 && prevIndex === 2){

        }else if(nowIndex === 4 && prevIndex === 3){

        }
      }
    });

最后,调整样式。在当前页的CSS文件中,可以自行根据流程节点的数目调整样式,进行覆盖。

@media (min-width: 768px) {
  /*调节总的宽度*/
  .ystep-lg {
    width: 400px;
  }
  /*调节进度条宽度*/
  .ystep-lg .ystep-progress, .ystep-lg .ystep-progress-bar {
    width: 300px;
  }
  /*调节各个原点之间的跨度*/
  .ystep-lg li {
    margin-right: 0px;
  }
  /*调节按钮位置*/
  .step-button{
    left: 400px;
  }
}
@media (min-width: 992px) {
  /*调节总的宽度*/
  .ystep-lg {
    width: 600px;
  }
  /*调节进度条宽度*/
  .ystep-lg .ystep-progress, .ystep-lg .ystep-progress-bar {
    width: 450px;
  }
  /*调节各个原点之间的跨度*/
  .ystep-lg li {
    margin-right: 50px;
  }
  /*调节按钮位置*/
  .step-button{
    left: 600px;
  }
}
@media (min-width: 1200px) {
  /*调节总的宽度*/
  .ystep-lg {
    width: 800px;
  }
  /*调节进度条宽度*/
  .ystep-lg .ystep-progress, .ystep-lg .ystep-progress-bar {
    width: 600px;
  }
  /*调节各个原点之间的跨度*/
  .ystep-lg li {
    margin-right: 100px;
  }
  /*调节按钮位置*/
  .step-button{
    left: 800px;
  }
}

本文转自博客园xingoo的博客,原文链接:JQuery向导插件Step——第一个阉割版插件,如需转载请自行联系原博主。

时间: 2024-08-01 08:56:11

JQuery向导插件Step——第一个阉割版插件的相关文章

jquery自动完成插件(autocomplete)应用之PHP版_jquery

于工作中需要用到自动提示这个功能,呵呵,自己又是js小菜,于是百度了一下,找到一个用jquery与其插件autocomplete开发的.net版的自动完成功能,于是down下来了改成了php版的,并加了支持向上/向下选择文字等功能,放上来共享一下,纯体力活... :) 1.下载jquery库,网址:http://jquery.com/ : 2.下载jquery autocomplete插件或者直接使用我附件里提供的文件,自己下载下来的文件需要修改一些内容才能支持向上/向下选择文字.解决中文乱码,

JQuery从头学起第一讲_jquery

JQuery的重要性对一个coder来说应该是不言而喻的, 多少次在应聘的时候被问及是否会JQuery:多少次在写脚本的时候因为浏览器的不兼容而吐血:多少次因为需要用脚本做一个简单的效果而写到手抽筋.JQuery出现后,很多问题都被轻易解决了. 每学一样东西的时候,我们总是喜欢去了解下它的历史.既然是从头学起,我们也来稍微了解下它的历史. jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多javascript高手加入其team,包括来自德国的Jörn Zaefferer

jQuery淡入淡出可自动切换的幻灯插件

jquery淡入淡出可自动切换的幻灯插件 1. 用户快速划过按钮时不触发鼠标事件; 2. 鼠标划入当前图片按钮时不闪烁; 3. 简化并优化代码. 使用方法就不详述了, 请参见源码及相关注释 $.fn.ifadeslide = function(iset){  /*   * iset可选参数说明:   * iset.field==>幻灯区域内的图片集   * iset.ico==>按钮钩子   * iset.high==>按钮高亮样式   * iset.interval==>图片切换

基于jquery的无限级联下拉框js插件_jquery

灵活性方面考虑了比较多的方面,提供了几个重要的配置方便在各类环境下使用,欢迎各位童鞋使用,源码完全开放.开发这个插件的缘于前段时间维护一个4级级联下拉框被里面200行代码及复杂的结构和bug所郁闷(之所以这么多代码是因为该级联下拉框有时只出现2个或3个),想到这类的需求其实经常都能遇到,jquery里没有这样比较好的插件,索性自己开发个.源代码并不复杂,稍微复杂的地方在第二个插件使用了缓存,造成理解起来十分困难,后面会做些解释. 插件一:适合在不与服务器进行AJAX交互情况使用,需预先将所有下拉

阉割版的iPhone买来做什么?

    如果说女人是视觉动物,并不为过.反正,我家里的这一位就是一个典型代表.每每看到我拿回新鲜稀奇的数码产品,只要是外观上看起来很讨巧的,色彩上很合她眼缘的,对不起,她就会第一时间征用了.      这段时间,小康手上的乐phone,就如此样的命运.基本上大部分时间都在她一个人在玩儿.让我很感慨,同时也很庆幸,至少,到了世界杯足球狂欢的时候,终于有了抢遥控器的好法子了.不过,把乐phone霸占几天之后,她却"移情别恋"了.她的闺密新入了一个苹果iPhone,她看着眼红,连哄带抢,也过

JQuery实现的图文自动轮播效果插件

  本文实例讲述了JQuery实现的图文自动轮播效果插件.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 intervalID = setInterval(cycleImage, slidetime); $(".main_image .desc").show(); // 展示图片 $(".main_im

jQuery扁平化风格下拉框美化插件FancySelect使用指南

 这篇文章主要介绍了jQuery扁平化风格下拉框美化插件FancySelect使用指南,需要的朋友可以参考下     FancySelect是一款小巧实用的jQuery下拉框美化插件.该下拉框美化插件采用扁平化设计风格,是追求时尚的开发者的首选下拉框美化插件之一. 使用方法 HTML结构 FancySelect实用十分简单,它可以和jQuery或Zepto结合使用.在页面中放置一些 <select> 下拉框组件,然后就可以通过 .fancySelect() 方法来调用该下拉框插件.如果下拉框中

千牛卖家版插件怎么用

  手机千牛怎么设置插件? 1.首先登陆千牛卖家工作台卖家版手机版,然后点击菜单栏的插件. 在千牛卖家版插件中找到想要设置添加的插件使用,也可以设置为默认插件.

千牛卖家版插件怎么关闭

  登陆千牛卖家版手机版,如下图示. 点击进入千牛工作台app设置. 列表失败"> 3.扎到千牛卖家版插件插件设置并进入. 点击关闭按钮,隐藏起来.