用jmSlip编写移动端顶部日历选择控件_javascript技巧

本文为大家分享了jmSlip移动端日历选择组件,可滚动选日期,并限制哪些日期可选和不可选。

主要用来根据后台返回生成一个日期选择器。

具体实现可关注jmslip: https://github.com/jiamao/jmSlip

示例:http://slip.jm47.com/demo/calendar/index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<title>日历</title>
<style>
body,html{
 font-family: Helvetica;
 font-weight: 100;
}
.justify {
 display: -webkit-box;
 display: -webkit-flex;
 display: flex;
 -webkit-box-pack: justify;
 -webkit-justify-content: space-between;
 justify-content: space-between;
}
.cell-box {
 background: #fff;
 box-shadow: 0 2px 4px rgba(0,0,0,.05);
}
.date-wrap {
 padding: 17px 0 18px;
 overflow: hidden;
}
.date-wrap .hd {
 padding: 0 15px;
 font-size: 12px;
 color: #888;
}
.date-wrap .bd {
 padding-top: 13px;
}
.date-wrap .hd .week {
 font-size: 20px;
 line-height: 26px;
}
.date-wrap .btn-chief-hollow {
 min-width: 49px;
 display: inline-block;
 height: 28px;
 line-height: 28px;
 border: 1px solid #417ddf;
 border-radius: 3px;
 color: #417ddf;
 font-size: 12px;
 text-align: center;
 text-decoration: none;
}
.date-wrap .date-list {
 list-style: none;
 display: -webkit-box;
 white-space: nowrap;
 height: 52px;
 font-size: 0;
 margin: 0;
 padding: 0;
}
.date-wrap .date-list li {
 -webkit-box-flex: 1;
 text-align: center;
 display: inline-block;
 text-align: center;
 width: 50px;
 height: 52px;
 font-size: 0;
}
.date-wrap .date-list li .week {
 margin: 0;
 padding: 0;
 padding-bottom: 7px;
 font-size: 12px;
 color: #b2b2b2;
 line-height: 15px;
}
.date-wrap .date-list li .date {
 margin: 0;
 padding: 0;
 position: relative;
 margin: 0 auto;
 width: 30px;
 height: 30px;
 border-radius: 100%;
 font-size: 14px;
 color: #d3d3d3;
 line-height: 30px;
}
.date-wrap .date-list li.in-case .date {
 color: #000;
}
.date-wrap .date-list li.cur .date {
 background-color: #2f78ec;
 color: #fff;
}
</style>
<script src="http://mat1.gtimg.com/www/mobi/js/zepto.min.js"></script>
<script src="../../src/jmSlip.js"></script>
</head>
<body>
<div class="cell-box">
 <div class="date-wrap js-calendar">
 <div class="hd justify">
  <div class="lt">
  <p class="js-date">十月 2016</p>
  <p class="week js-week">星期一</p>
  </div>
  <div class="rt">
  <a class="btn-chief-hollow js-tap-on js-today" href="javascript:;">今日</a>
  </div>
 </div>
 <div class="bd">
  <div class="date-list-wrap js-calendar-days-container">
  <!-- 控制li
   1.当日,加"cur"
   2.有事件,加"in-case" -->
  <ul class="date-list js-calendar-days">
   <li class="js-item in-case js-has-data" data-day="20161011">
   <p class="week">二</p>
    <p class="date">11</p>
   </li>
   <li class="js-item" data-day="20161012">
   <p class="week">三</p>
    <p class="date">12</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161013">
   <p class="week">四</p>
    <p class="date">13</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161014">
   <p class="week">五</p>
    <p class="date">14</p>
   </li>
   <li class="js-item" data-day="20161015">
   <p class="week">六</p>
    <p class="date">15</p>
   </li>
   <li class="js-item" data-day="20161016">
   <p class="week">日</p>
    <p class="date">16</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161017">
   <p class="week">一</p>
    <p class="date">17</p>
   </li>
   <li class="js-item" data-day="20161018">
   <p class="week">二</p>
    <p class="date">18</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161019">
   <p class="week">三</p>
    <p class="date">今日</p>
   </li>
   <li class="js-itema" data-day="20161020">
   <p class="week">四</p>
    <p class="date">20</p>
   </li>
   <li class="js-item" data-day="20161021">
   <p class="week">五</p>
    <p class="date">21</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161022">
   <p class="week">六</p>
    <p class="date">22</p>
   </li>
   <li class="js-item" data-day="20161023">
   <p class="week">日</p>
    <p class="date">23</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161024">
   <p class="week">一</p>
    <p class="date">24</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161025">
   <p class="week">二</p>
    <p class="date">25</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161026">
   <p class="week">三</p>
    <p class="date">26</p>
   </li>
   <li class="js-item in-case js-has-data" data-day="20161027">
   <p class="week">四</p>
    <p class="date">27</p>
   </li>
  </ul>
  </div>
 </div>
 </div>
</div>
<br />
<br />
<div class="js-content"></div>
<script>
 var slipCalendar = new jmSlip($('.js-calendar-days-container'),'item',{
 mousewheel:true,//支持滚轮
 direction: 'x',
 page: $('.js-calendar-days li[data-day="20161019"]').index(),//默认选中20161019这天,当它为今天
 duration: 800,
 itemOffWidth: 0, //每个项的偏移量纠正
 //当滑动时自动选择回调,自定义控制是否可选
 selectHandler: function(curIndex, newIndex) {
  //获取自动选择的那一天,如果不是可选的,则选择它最近的一天
  var item = $('.js-calendar-days li').eq(newIndex);
  if(!item.hasClass('js-has-data')) {
  //如果是往后拉,则优先向后搜询可用的日期
  //只往前后同时搜4天,超过,则按用户拉的方向一直向下搜
  var der = curIndex > newIndex?-1:1;
  for(var i=1;i<5;i++) {
   var index = newIndex+(i*der);
   item = $('.js-calendar-days li').eq(index);
   if(item.hasClass('js-has-data') && index != curIndex) return index;
   index = newIndex-(i*der);
   item = $('.js-calendar-days li').eq(index);
   if(item.hasClass('js-has-data') && index != curIndex) return index;
  }
  //依然没有找到,则一直往前找
  //最长找三个月
  for(;i<93;i++) {
   var index = newIndex+(i*der);
   item = $('.js-calendar-days li').eq(index);
   if(item.hasClass('js-has-data') && index != curIndex) return index;
  }

  //找不到可用的日期,则返回
  return false;
  }
 },
 onPageStart: function(index){
  //获取自动选择的那一天,如果不是可选的,则选择它最近的一天
  var item = $('.js-calendar-days li').eq(index);
  if(!item.hasClass('js-has-data')) return false;
 },
 onTouchMove: function(evt, offset) {

 },
 onPageEnd: function(oldPage,newPage) {
  //定位于选择的那一天
  var item = $('.js-calendar-days li').eq(newPage);
  if(item.hasClass('cur')) return;//如果它是已经被选中的,则直接返回,不需要再触发查询数据
  $('.js-calendar-days').find('li.cur').removeClass('cur');
  item.addClass('cur');

  //刷新其数据
  $('.js-content').html(item.attr('data-day'));
 }
 });

 //选中某个日期,则拉取它的数据
 //只能选择有数据的项
 $('.js-calendar-days').on('click', '.js-has-data', function(){
 if(!slipCalendar || $(this).hasClass('cur')) return;
 //定位于选择的那一天
 slipCalendar.go($(this).index());
 });

 $('.js-today').click(function(){
 slipCalendar.go($('.js-calendar-days li[data-day="20161019"]').index());
 });
</script>
</body>
</html>

精彩专题分享:javascript日历插件使用方法汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索js日历控件
javascript回到顶部、javascript 返回顶部、javascript滚动到顶部、网页顶部日历代码、javascript 日历,以便于您获取更多的相关知识。

时间: 2025-01-26 09:57:19

用jmSlip编写移动端顶部日历选择控件_javascript技巧的相关文章

jQuery实现移动端滑块拖动选择数字效果_javascript技巧

本文为大家分享了基于jquery ui实现的一个精美实用的效果,可以通过鼠标拖拽滑动效果来选择数字,供大家参考,具体内容如下 运行效果图: 实现代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="gb2312"> <title>demo</title> <link rel="stylesheet"

一起学写js Calender日历控件_javascript技巧

最近看了一下关于js日期的一些函数,突然想到了日历控件,于是试着写了一个,作为后台程序员的我水平有限,大家抱着学习的态度看看我写的这个例子吧,一起学习进步! 首先一个常用的日期函数: Date(year,month,day)  var   date=new  Date(); 获取年份 var   year=this.date.getFullYear(); 获取月份,这里是月索引所以要+1 var   month=this.date.getMonth()+1; 获取当天是几号 var   day=

纯javascript版日历控件_javascript技巧

平时只有下班时间能code,闲来写了个纯javascript版.引用该calendar.js文件,然后给要设置成日历控件的input的id设置成calendar,该input就会变成日历控件. <!doctype html> <html> <head> <meta charset="utf-8"> <title>日历控件</title> <script src="js/calendar.js&quo

wpf-WPF中,日历控件的大小或者日期选择控件的大小怎么调整?

问题描述 WPF中,日历控件的大小或者日期选择控件的大小怎么调整? 在网上看了不少资料,貌似没有一个很好的答案. 虽然这两个控件都有width和height属性,但是设置之后应该是这个控件所占的控件的大小发生了变化,实际上显示的内容并没有发生变化. 似乎说可以写样式可以实现,但是挺麻烦的,不知道大家有没有遇到过这样的问题,怎么修改这两个控件实际显示的大小?

基于jQuery的日期选择控件_jquery

但是也有些问题,第一画日历有点慢,第二兼容性不太好IE Only,第三它不是基于jQuery的哈哈. 那还是老规矩,做之前先看下效果   这下是更酷的Ext风格了. 从上图我们可以看出这个控件其实有两个视图一个日期月视图,还有一个是年月选择视图. 1:还是先从HTML入手 日期控件确定HTML其实还是比较简单,因为明摆着是列表的数据格式,当然主要是采用table了. 两个视图分别用两个Div包裹,控制div的显示隐藏即可以切换视图了.完整的HTMl结构大家可以用IEDeveloper看一下Dem

Android开发入门(十一)选择控件 11.2 DatePicker

DataPicker和上一节讲的TimePicker很相似.使用DatePicker,可以让用户选择一个特定的日期.下面展 示如何使用DatePicker. 1. 使用上一节的工程,BasicViews4,修改main.xml. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and

《Android 平板电脑开发实战详解和典型案例》——2.5节数字选择控件—— NumberPiker

2.5 数字选择控件-- NumberPiker Android 平板电脑开发实战详解和典型案例 上一节中,介绍了ActionBar的基本知识及简单案例,本节将介绍Android 3.0新增控件数字选择控件NumberPicker,主要内容包括其基本知识以及一个简单的案例. 2.5.1 数字选择控件基本知识 数字选择控件NumberPiker可以理解成由两个Button中夹着一个EditText组成,EditText用来显示数字,而两个Button按钮则控制EditText中数字的增减.数字选择

Ext JS 4实现带week(星期)的日期选择控件(实战二)_extjs

前言 JavaScript 中的日期和时间 Ext JS 4实现带week(星期)的日期选择控件(实战一) 如对本篇的一些预备知识需详尽了解,可参考以上两篇. Javascript 有提供Date 对象用于处理时间.但是Date 并没有提供获取星期的方法. 要在web 端通过js 方式获取某个时间是这一年的第几个星期,可以根据一些算法去实现. 当然, jquery 的扩展组件 等有直接提供这样的一些现成包. 像Ext js 就有提供获取星期的方法 Ext.Date.getWeekOfYear(d

jquery日期时间My97DatePicker选择控件函数使用例子

1.推荐日期选择控件:My97DatePicker My97DatePicker是一个非常好用的日期/时间选择控件,支持多种日期时间类型等: 支持的浏览器 IE 6.0+ , Firefox 2.0+ , Chrome, Opera 9.5+ , Safari 3.0+ 注意:IE 8/9/10/11是完美支持的 功能如下: 常规功能 支持多种调用模式 下拉,输入,导航选择日期 支持周显示 只读开关,高亮周末功能 操作按钮自定义 自动选择显示位置 自定义弹出位置 自定义星期的第一天new 特色功