zoukankan      html  css  js  c++  java
  • 移动端类似IOS的滚动年月控件(需要jQuery和iScroll)

    http://www.cnblogs.com/ccblogs/p/5260949.html

    一. 效果图

    二. 功能介绍

      支持滚动和点击选择年月。(目前只支持设置年月的最大最小值,不支持整体的最大最小值)

    三. 代码

      1. 在你的html中添加如下代码:

        直接加载<body>里面,这里是插件渲染html的地方。

    <div id="datePlugin"></div>

      2. 在你的html中添加输入框:

        可以是直接的一个输入框,也可以是input-group样式的。

        我这里使用的时input-group,html是由JS加载的。

    '<div class="item item-buydate input-group">' +
    '<span class="input-group-span no-border-right" id="buydate-span">申购成交时间</span>' +
    '<input class="txt-input txt-buydate no-border-left text-right" type="text" placeholder="请选择申购日期" readonly>' +
    '</div>';

      3. 调用方法:

    $('.item-buydate').date({ title: '申购成交时间' });

      4. JS源代码:

    复制代码
    (function($) {
      $.fn.date = function(options) {
        var that = $(this);
        var docType = $(this).is('input');
        var nowdate = new Date();
        var indexY = 1,
          indexM = 1;
        var initY = parseInt((nowdate.getYear() + '').substr(1, 2));
        var initM = parseInt(nowdate.getMonth() + '') + 1;
        var yearScroll = null,
          monthScroll = null;
        $.fn.date.defaultOptions = {
          title: '请选择年月',
          beginyear: 2000, //日期--年--份开始
          endyear: nowdate.getFullYear(), //日期--年--份结束
          beginmonth: 1, //日期--月--份结束
          endmonth: 12, //日期--月--份结束
          curdate: false, //打开日期是否定位到当前日期
          mode: null, //操作模式(滑动模式)
          event: "click", //打开日期插件默认方式为点击后后弹出日期
          isShowByDefault: false,
          isSetFinancialDefaultDateValue: false
        }
        var opts = $.extend(true, {}, $.fn.date.defaultOptions, options);
        if (opts.isSetFinancialDefaultDateValue) {
          if (opts.beginyear < opts.endyear) {
            initY = ((opts.endyear - 1) + '').substr(2, 2);
          } else if (opts.beginyear = opts.endyear) {
            initY = (opts.endyear + '').substr(2, 2);
          }
        }
        if (opts.isShowByDefault) {
          showDatePicker()
        }
        that.bind(opts.event, showDatePicker);
    
        function showDatePicker() {
          createUL();
          init_iScrll();
          extendOptions();
          that.blur();
          refreshDate();
          bindButton();
        }
    
        function refreshDate() {
          yearScroll.refresh();
          monthScroll.refresh();
          resetInitDete();
          yearScroll.scrollTo(0, initY * 40, 100, true);
          monthScroll.scrollTo(0, initM * 40 - 40, 100, true);
        }
    
        function resetIndex() {
          indexY = 1;
          indexM = 1;
        }
    
        function resetInitDete() {
          if (opts.curdate) {
            return false;
          } else if (that.val() === '') {
            if (that.children('input').val() === '') {
              return false;
            }
            initY = parseInt(that.children('input').val().substr(2, 2));
            initM = parseInt(that.children('input').val().substr(5, 2));
          } else {
            initY = parseInt(that.val().substr(2, 2));
            initM = parseInt(that.val().substr(5, 2));
          }
        }
    
        function bindButton() {
          resetIndex();
          $("#yearwrapper ul li").unbind('click').click(function() {
            if ($(this).hasClass("placeholder")) {
              return false;
            }
            var target = $(this).prev('li');
            yearScroll.scrollToElement(target[0]);
            indexY = $(this).attr('data-params');
            $("#dateconfirm").removeClass("disabled");
          });
          $("#monthwrapper ul li").unbind('click').click(function() {
            if ($(this).hasClass("placeholder")) {
              return false;
            }
            var target = $(this).prev('li');
            monthScroll.scrollToElement(target[0]);
            indexM = $(this).attr('data-params');
            $("#dateconfirm").removeClass("disabled");
          });
          $("#dateshadow").unbind('click').click(function() {
            $("#datePage").hide();
            $("#dateshadow").hide();
          });
          $("#dateconfirm").unbind('click').click(function() {
            if ($(this).hasClass('disabled')) {
              return false;
            }
            if (indexY !== undefined && indexY !== '') {
              indexY = parseInt(parseFloat(indexY).toFixed(0));
            }
            if (indexM !== undefined && indexM !== '') {
              indexM = parseInt(parseFloat(indexM).toFixed(0));
            }
            var datestr = $("#yearwrapper ul li:eq(" + indexY + ")").html().substr(0, $("#yearwrapper ul li:eq(" + indexY + ")").html().length - 1) + "-" +
              $("#monthwrapper ul li:eq(" + indexM + ")").html().substr(0, $("#monthwrapper ul li:eq(" + indexM + ")").html().length - 1);
            if (docType) {
              that.val(datestr);
              that.trigger('input');
            } else {
              that.children('input').val(datestr);
              that.children('input').trigger('input');
            }
            $("#datePage").hide();
            $("#dateshadow").hide();
          });
          $("#datecancle").click(function() {
            $("#datePage").hide();
            $("#dateshadow").hide();
          });
        }
    
        function extendOptions() {
          $("#datePage").show();
          $("#dateshadow").show();
        }
        //日期滑动
        function init_iScrll() {
          var oldIndexY = parseInt(indexY.toFixed(0));
          var oldIndexM = parseInt(indexM.toFixed(0));
          var strY = $("#yearwrapper ul li:eq(" + oldIndexY + ")").html().substr(0, $("#yearwrapper ul li:eq(" + oldIndexY + ")").html().length - 1);
          var strM = $("#monthwrapper ul li:eq(" + oldIndexM + ")").html().substr(0, $("#monthwrapper ul li:eq(" + oldIndexM + ")").html().length - 1);
          yearScroll = new iScroll("yearwrapper", {
            snap: "li",
            vScrollbar: false,
            onScrollMove: function() {
              $("#dateconfirm").addClass("disabled");
            },
            onScrollEnd: function() {
              indexY = (this.y / 40) * (-1) + 1;
              $("#dateconfirm").removeClass("disabled");
            }
          });
          monthScroll = new iScroll("monthwrapper", {
            snap: "li",
            vScrollbar: false,
            onScrollMove: function() {
              $("#dateconfirm").addClass("disabled");
            },
            onScrollEnd: function() {
              indexM = (this.y / 40) * (-1) + 1;
              $("#dateconfirm").removeClass("disabled");
            }
          });
        }
    
        function createUL() {
          CreateDateUI();
          $("#yearwrapper ul").html(createYEAR_UL());
          $("#monthwrapper ul").html(createMONTH_UL());
        }
    
        function CreateDateUI() {
          var str = '<div id="dateshadow"></div>' +
            '<div id="datePage" class="page">' +
            '<section>' +
            '<div id="datetitle">' + opts.title + '</div>' +
            '<div id="datemark"></div>' +
            '<div id="datescroll">' +
            '<div id="yearwrapper">' +
            '<ul></ul>' +
            '</div>' +
            '<div id="monthwrapper">' +
            '<ul></ul>' +
            '</div>' +
            '</div>' +
            '</section>' +
            '<footer id="dateFooter">' +
            '<div id="setcancle">' +
            '<ul>' +
            '<li id="dateconfirm">确定</li>' +
            '<li id="datecancle">取消</li>' +
            '</ul>' +
            '</div>' +
            '</footer>' +
            '</div>'
          $("#datePlugin").html(str);
        }
    
        function createYEAR_UL() {
          var str = '<li class="placeholder">&nbsp;</li>';
          for (var i = opts.beginyear; i <= opts.endyear; i++) {
            str += '<li data-params="' + (i - opts.beginyear + 1) + '">' + i + '年</li>';
          }
          return str + '<li class="placeholder">&nbsp;</li>';
        }
    
        function createMONTH_UL() {
          var str = '<li class="placeholder">&nbsp;</li>';
          for (var i = opts.beginmonth; i <= opts.endmonth; i++) {
            if (i < 10) {
              j = "0" + i;
            } else {
              j = i;
            }
            str += '<li data-params="' + (i - opts.beginmonth + 1) + '">' + j + '月</li>';
          }
          return str + '<li class="placeholder">&nbsp;</li>';
        }
      }
    })(jQuery);
    复制代码

       5. CSS样式:

    复制代码
    body,
    div,
    ul,
    li,
    h1 {
      padding: 0;
      margin: 0;
      font-family: Microsoft YaHei, Arail, sans-serif;
    }
    
    ul,
    li {
      list-style: none;
      list-style-type: none;
    }
    
    #dateshadow {
      display: none;
      position: absolute;
       100%;
      height: 100%;
      top: 0;
      left: 0;
      background: #000000;
      opacity: 0.5;
    }
    
    #datePage {
      border-radius: 5px;
      position: absolute;
      top: 20%;
      margin: 0 auto;
      vertical-align: middle;
       80%;
      height: 238px;
      background: #FFFFFF;
      z-index: 9999999;
    }
    
    #datetitle {
      text-align: center;
      color: #666666;
      padding: 20px 10px 12px;
      line-height: 18px;
      font-size: 18px;
    }
    
    #datescroll {
      background: #F8F8F8;
      margin: 10px 18px;
      border: 1px solid #dddddd;
      border-radius: 3px;
      height: 120px;
      text-align: center;
      line-height: 40px;
    }
    
    .page {
      display: none;
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
       100%;
      height: 100%;
      overflow: hidden;
    }
    
    #datescroll div {
      float: left;
      margin-top: 15px;
    }
    
    #yearwrapper {
      position: absolute;
      margin-left: 16%;
      left: 0;
      top: 45px;
      bottom: 60px;
       32%;
    }
    
    #monthwrapper {
      position: absolute;
      margin-left: 28%;
      left: 26%;
      top: 45px;
      bottom: 60px;
       32%;
    }
    
    #yearwrapper ul li,
    #monthwrapper ul li {
      color: #333333;
      font-size: 14px;
    }
    
    #setcancle ul {
      text-align: center;
      line-height: 30px;
    }
    
    #setcancle ul li {
      border-radius: 3px;
      float: left;
       32%;
      height: 30px;
      list-style-type: none;
      font-size: 14px;
    }
    
    #dateconfirm {
      position: absolute;
      background: #8e6dd1;
      right: 12%;
      color: #FFFFFF;
    }
    
    #dateconfirm.disabled {
      background: #dbdddd!important;
    }
    
    #datecancle {
      position: absolute;
      background: #dbdddd;
      left: 12%;
      color: #FFFFFF;
    }
    
    #datemark {
      left: 10%;
       80%;
      height: 30px;
      position: absolute;
      top: 104px;
      background: #eeeeee;
    }
    
    #datescroll_datetime {
      display: none;
      background: #F8F8F8;
       94%;
      margin: 10px 3%;
      margin-top: 10px;
      border: 1px solid #E0E0E0;
      border-radius: 4px;
      height: 120px;
      text-align: center;
      line-height: 40px;
    }
    
    #yearwrapper ul,
    #monthwrapper ul {
       100%;
    }
    
    #dateFooter {
       100%;
      background: #fff;
      height: 44px;
      bottom: 0px;
      position: absolute;
    }
    复制代码
  • 相关阅读:
    windows下安装php5.5的redis扩展
    redis常见命令
    HDU 5869 Different GCD Subarray Query
    WA时查错点
    HDU 3333 Turing Tree
    HDU 5868 Different Circle Permutation
    AcWing 272 最长公共上升子序列 (dp)
    中国计量大学现代科技学院第四届“中竞杯”程序设计校赛 I 题 (双端队列bfs / 优先队列bfs)
    AtCoder ARC 109 D (拆点 + 分类讨论)
    codeforces 1408D. Searchlights (暴力 + 前缀优化)
  • 原文地址:https://www.cnblogs.com/libin-1/p/6043018.html
Copyright © 2011-2022 走看看