Mdate.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. (function () {
  2. var d = document;
  3. var includeCss = function (url) {
  4. var link = d.createElement("link");
  5. link.rel = "stylesheet";
  6. link.type = "text/css";
  7. link.href = url;
  8. d.getElementsByTagName("head")[0].appendChild(link)
  9. };
  10. includeCss("/wap/first/zsff/css/Mdate.css");
  11. var dateopts = {
  12. beginYear: 2000,
  13. beginMonth: 1,
  14. beginDay: 1,
  15. endYear: new Date().getFullYear(),
  16. endMonth: new Date().getMonth() + 1,
  17. endDay: new Date().getDate(),
  18. format: "YMD"
  19. };
  20. var MdSelectId = "";
  21. var MdAcceptId = "";
  22. var dateContentBox = "";
  23. var datePlugs = "";
  24. var yearTag = "";
  25. var monthTag = "";
  26. var dayTag = "";
  27. var indexY = 1;
  28. var indexM = 1;
  29. var indexD = 1;
  30. var initM = null;
  31. var initD = null;
  32. var yearScroll = null;
  33. var monthScroll = null;
  34. var dayScroll = null;
  35. var Mdate = function (el, opts) {
  36. if (!opts) {
  37. opts = {}
  38. }
  39. this.id = el;
  40. this.selectorId = d.getElementById(this.id);
  41. this.acceptId = d.getElementById(opts.acceptId) || d.getElementById(this.id);
  42. this.beginYear = opts.beginYear || dateopts.beginYear;
  43. this.beginMonth = opts.beginMonth || dateopts.beginMonth;
  44. this.beginDay = opts.beginDay || dateopts.beginDay;
  45. this.endYear = opts.endYear || dateopts.endYear;
  46. this.endMonth = opts.endMonth || dateopts.endMonth;
  47. this.endDay = opts.endDay || dateopts.endDay;
  48. this.format = opts.format || dateopts.format;
  49. this.successFn=opts.success || null;
  50. this.dateBoxShow()
  51. };
  52. Mdate.prototype = {
  53. constructor: Mdate, dateBoxShow: function () {
  54. var that = this;
  55. that.selectorId.onclick = function () {
  56. that.createDateBox();
  57. that.dateSure()
  58. }
  59. }, createDateBox: function () {
  60. var that = this;
  61. MdatePlugin = d.getElementById("MdatePlugin");
  62. if (!MdatePlugin) {
  63. dateContentBox = d.createElement("div");
  64. dateContentBox.id = "MdatePlugin";
  65. d.body.appendChild(dateContentBox);
  66. MdatePlugin = d.getElementById("MdatePlugin")
  67. }
  68. MdatePlugin.setAttribute("class", "slideIn");
  69. that.createDateUi();
  70. var yearUl = d.getElementById("yearUl");
  71. var monthUl = d.getElementById("monthUl");
  72. var dayUl = d.getElementById("dayUl");
  73. yearUl.innerHTML = that.createDateYMD("year");
  74. that.initScroll();
  75. that.refreshScroll()
  76. }, createDateUi: function () {
  77. var str = "" + '<section class="getDateBg"></section>' + '<section class="getDateBox" id="getDateBox">' + '<div class="choiceDateTitle">' + '<button id="dateCancel">取消</button>' + '<button id="dateSure" class="fr">确定</button>' + "</div>" + '<div class="dateContent">' + '<div class="checkeDate"></div>' + '<div id="yearwrapper">' + '<ul id="yearUl"></ul>' + "</div>" + '<div id="monthwrapper">' + '<ul id="monthUl"></ul>' + "</div>"+ "</div>" + "</section>";
  78. MdatePlugin.innerHTML = str
  79. }, createDateYMD: function (type) {
  80. var that = this;
  81. var str = "<li>&nbsp;</li>";
  82. var beginNum = null, endNum = null, unitName = "年", dataStyle = "data-year";
  83. if (type == "year") {
  84. beginNum = that.beginYear;
  85. endNum = that.endYear
  86. }
  87. if (type == "month") {
  88. unitName = "月";
  89. dataStyle = "data-month";
  90. beginNum = that.beginMonth;
  91. endNum = 12;
  92. if (yearTag != that.beginYear) {
  93. beginNum = 1
  94. }
  95. if (yearTag == dateopts.endYear) {
  96. endNum = that.endMonth
  97. }
  98. }
  99. if (type == "day") {
  100. unitName = "日";
  101. dataStyle = "data-day";
  102. beginNum = 1;
  103. endNum = new Date(yearTag, monthTag, 0).getDate();
  104. if (yearTag == that.beginYear && monthTag == that.beginMonth) {
  105. beginNum = that.beginDay
  106. }
  107. if (yearTag == that.endYear && monthTag == that.endMonth) {
  108. endNum = that.endDay
  109. }
  110. }
  111. for (var i = beginNum; i <= endNum; i++) {
  112. str += "<li " + dataStyle + "=" + i + ">" + that.dateForTen(i) + unitName + "</li>"
  113. }
  114. return str + "<li>&nbsp;</li>"
  115. }, initScroll: function () {
  116. var that = this;
  117. yearScroll = new iScroll("yearwrapper", {
  118. snap: "li", vScrollbar: false, onScrollEnd: function () {
  119. indexY = Math.ceil(this.y / 40 * -1 + 1);
  120. yearTag = yearUl.getElementsByTagName("li")[indexY].getAttribute("data-year");
  121. monthUl.innerHTML = that.createDateYMD("month");
  122. monthScroll.refresh();
  123. try {
  124. monthTag = monthUl.getElementsByTagName("li")[indexM].getAttribute("data-month")
  125. } catch (err) {
  126. return true
  127. }
  128. }
  129. });
  130. monthScroll = new iScroll("monthwrapper", {
  131. snap: "li", vScrollbar: false, onScrollEnd: function () {
  132. indexM = Math.ceil(this.y / 40 * -1 + 1);
  133. if (indexM == 1 && yearTag != that.beginYear) {
  134. monthTag = 1
  135. } else {
  136. monthTag = monthUl.getElementsByTagName("li")[indexM].getAttribute("data-month");
  137. }
  138. }
  139. });
  140. }, refreshScroll: function () {
  141. var that = this;
  142. var inputYear = that.acceptId.getAttribute("data-year");
  143. var inputMonth = that.acceptId.getAttribute("data-month");
  144. var inputDay = that.acceptId.getAttribute("data-day");
  145. inputYear = inputYear || new Date().getFullYear();
  146. inputMonth = inputMonth || new Date().getMonth()+1;
  147. inputDay = inputDay || new Date().getDate();
  148. initM = that.beginMonth;
  149. initD = that.beginDay;
  150. if (inputYear != that.beginYear && initM != 1) {
  151. initM = 1
  152. }
  153. if (inputMonth != that.beginMonth && initD != 1) {
  154. initD = 1
  155. }
  156. inputYear -= that.beginYear;
  157. inputMonth -= initM;
  158. inputDay -= initD;
  159. yearScroll.refresh();
  160. yearScroll.scrollTo(0, inputYear * 40, 300, true);
  161. monthScroll.scrollTo(0, inputMonth * 40, 300, true);
  162. }, dateSure: function () {
  163. var that = this;
  164. var sureBtn = d.getElementById("dateSure");
  165. var cancelBtn = d.getElementById("dateCancel");
  166. sureBtn.onclick = function () {
  167. var monthTags = monthTag >= 10 ? monthTag :'0'+monthTag;
  168. if (that.format == "YMD") {
  169. that.acceptId.value = yearTag + "年" + monthTags + "月"
  170. } else {
  171. that.acceptId.value = yearTag + that.format + that.dateForTen(monthTags) ;//that.format ;//that.dateForTen(dayTag)
  172. }
  173. that.acceptId.setAttribute("data-year", yearTag);
  174. that.acceptId.setAttribute("data-month", monthTags);
  175. that.dateCancel();
  176. that.successFn && that.successFn(yearTag+'年'+monthTags+'月');
  177. };
  178. cancelBtn.onclick = function () {
  179. that.dateCancel()
  180. }
  181. }, dateForTen: function (n) {
  182. if (n < 10) {
  183. return "0" + n
  184. } else {
  185. return n
  186. }
  187. }, dateCancel: function () {
  188. MdatePlugin.setAttribute("class", "slideOut");
  189. setTimeout(function () {
  190. MdatePlugin.innerHTML = ""
  191. }, 400)
  192. }
  193. };
  194. if (typeof exports !== "undefined") {
  195. exports.Mdate = Mdate
  196. } else {
  197. window.Mdate = Mdate
  198. }
  199. })();