@tarojs/components
Version:
Taro 组件库。
1 lines • 13.1 kB
JavaScript
var __spreadArray=this&&this.__spreadArray||function(e,t){for(var i=0,r=t.length,a=e.length;i<r;i++,a++)e[a]=t[i];return e};import{r as registerInstance,c as createEvent,h,H as Host,g as getElement}from"./index-5bd7cbab.js";import{c as classnames}from"./index-cd1a2d33.js";function getTimeRange(e,t){var i=[];for(var r=e;r<=t;r++){i.push(""+(r<10?"0":"")+r)}return i}var hoursRange=__spreadArray(__spreadArray(["20","21","22","23"],getTimeRange(0,23)),["00","01","02","03"]);var minutesRange=__spreadArray(__spreadArray(["56","57","58","59"],getTimeRange(0,59)),["00","01","02","03"]);function verifyValue(e,t){if(!isNaN(+e)&&e>=0&&e<t.length)return true;return false}function verifyTime(e){if(!/^\d{1,2}:\d{1,2}$/.test(e))return false;var t=e.split(":").map((function(e){return+e}));if(t[0]<0||t[0]>23)return false;if(t[1]<0||t[1]>59)return false;return true}function compareTime(e,t){var i=e.split(":").map((function(e){return+e}));var r=t.split(":").map((function(e){return+e}));if(i[0]<r[0])return true;if(i[0]===r[0]&&i[1]<=r[1])return true;return false}function verifyDate(e){if(!e)return false;var t=new Date(e.replace(/-/g,"/"));return isNaN(t.getMonth())?false:t}function getMaxDay(e,t){if(t===4||t===6||t===9||t===11)return 30;if(t===2){if(e%4===0&&e%100!==0||e%400===0)return 29;else return 28}return 31}function formatValue(e){var t;if(Array.isArray(e)){t=e.map((function(e){return String(e)}))}else{t=e}return t}function getDateRange(e,t){var i=[];for(var r=e;r<=t;r++){i.push(r)}return i}function getYearRange(e,t){return getDateRange(e,t)}function getMonthRange(e,t,i){var r=1;var a=12;if(e.getFullYear()===i){r=e.getMonth()+1}if(t.getFullYear()===i){a=t.getMonth()+1}return getDateRange(r,a)}function getDayRange(e,t,i,r){var a=1;var n=getMaxDay(i,r);if(e.getFullYear()===i&&e.getMonth()+1===r){a=e.getDate()}if(t.getFullYear()===i&&t.getMonth()+1===r){n=t.getDate()}return getDateRange(a,n)}var TOP=102;var LINE_HEIGHT=34;var MASK_HEIGHT=LINE_HEIGHT*7;var indexCss=".weui-picker,.weui-picker__hd{font-size:12px}";var Picker=function(){function e(e){var t=this;registerInstance(this,e);this.onChange=createEvent(this,"change",7);this.onColumnChange=createEvent(this,"columnchange",7);this.onCancel=createEvent(this,"cancel",7);this.index=[];this.mode="selector";this.disabled=false;this.range=[];this.start="";this.end="";this.fields="day";this.name="";this.pickerValue=[];this.height=[];this.hidden=true;this.fadeOut=false;this.isWillLoadCalled=false;this.showPicker=function(){if(t.disabled)return;t.height=t.getHeightByIndex();t.hidden=false};this.getHeightByIndex=function(){var e=t.index.map((function(e){var i=0;if(t.mode==="time"){i=LINE_HEIGHT*4}return TOP-LINE_HEIGHT*e-i}));return e};this.hidePicker=function(){t.fadeOut=true;setTimeout((function(){t.hidden=true;t.fadeOut=false}),350)};this.handleChange=function(){t.hidePicker();t.index=t.height.map((function(e){return(TOP-e)/LINE_HEIGHT}));var e=t.index.length&&t.mode!=="selector"?t.index:t.index[0];if(t.mode==="time"){var i=[hoursRange.slice(),minutesRange.slice()];var r=t.index.map((function(e,t){return i[t][e]}));t.index=r.map((function(e){return parseInt(e)}));e=r.join(":")}if(t.mode==="date"){var a=t.pickerDate,n=a._start,o=a._end,u=a._updateValue;var s=u[0];var h=u[1];var l=getYearRange(n.getFullYear(),o.getFullYear());var c=getMonthRange(n,o,s);var d=getDayRange(n,o,s,h);var f=l[t.index[0]];var g=c[t.index[1]];var p=d[t.index[2]];if(t.fields==="year"){e=[f]}else if(t.fields==="month"){e=[f,g]}else{e=[f,g,p]}e=e.map((function(e){return e<10?"0"+e:e})).join("-")}t.pickerValue=e;t.onChange.emit({value:e})};this.handleCancel=function(){t.hidePicker();t.onCancel.emit()};this.updateHeight=function(e,i,r){if(r===void 0){r=false}var a=__spreadArray([],t.height);a[i]=e;t.height=a;if(r){var n=t,o=n.start,u=n.end;if(!verifyTime(o))o="00:00";if(!verifyTime(u))u="23:59";if(!compareTime(o,u))return;var s=[hoursRange.slice(),minutesRange.slice()];var h=t.height.map((function(e){return(TOP-e)/LINE_HEIGHT}));var l=h.map((function(e,t){return s[t][e]})).join(":");if(!compareTime(o,l)){var c=o.split(":").map((function(e){return TOP-LINE_HEIGHT*(+e+4)}));requestAnimationFrame((function(){return t.height=c}))}else if(!compareTime(l,u)){var d=u.split(":").map((function(e){return TOP-LINE_HEIGHT*(+e+4)}));requestAnimationFrame((function(){return t.height=d}))}}};this.handleColumnChange=function(e,i){t.onColumnChange.emit({column:Number(i),value:(TOP-e)/LINE_HEIGHT})};this.updateDay=function(e,i){var r=t.pickerDate,a=r._start,n=r._end,o=r._updateValue;o[i]=e;var u=o[0];var s=o[1];var h=o[2];if(i===0){var l=getMonthRange(a,n,u);var c=l[l.length-1];var d=l[0];if(s>c)o[1]=c;if(s<d)o[1]=d;var f=l.indexOf(o[1]);var g=TOP-LINE_HEIGHT*f;t.updateDay(o[1],1);t.updateHeight(g,"1")}else if(i===1){var p=getDayRange(a,n,u,s);var c=p[p.length-1];var d=p[0];if(h>c)o[2]=c;if(h<d)o[2]=d;var f=p.indexOf(o[2]);var g=TOP-LINE_HEIGHT*f;t.updateDay(o[2],2);t.updateHeight(g,"2")}};this.getSelector=function(){return h("taro-picker-group",{range:t.range,rangeKey:t.rangeKey,height:t.height[0],updateHeight:t.updateHeight,columnId:"0"})};this.getMultiSelector=function(){return t.range.map((function(e,i){return h("taro-picker-group",{range:e,rangeKey:t.rangeKey,height:t.height[i],updateHeight:t.updateHeight,onColumnChange:t.handleColumnChange,columnId:String(i)})}))};this.getTimeSelector=function(){var e=hoursRange.slice();var i=minutesRange.slice();return[h("taro-picker-group",{mode:"time",range:e,height:t.height[0],updateHeight:t.updateHeight,columnId:"0"}),h("taro-picker-group",{mode:"time",range:i,height:t.height[1],updateHeight:t.updateHeight,columnId:"1"})]};this.getDateSelector=function(){var e=t,i=e.fields,r=e.height;var a=t.pickerDate,n=a._start,o=a._end,u=a._updateValue;var s=u[0];var l=u[1];var c=getYearRange(n.getFullYear(),o.getFullYear()).map((function(e){return e+"年"}));var d=getMonthRange(n,o,s).map((function(e){return(e<10?"0"+e:e)+"月"}));var f=getDayRange(n,o,s,l).map((function(e){return(e<10?"0"+e:e)+"日"}));var g=[h("taro-picker-group",{mode:"date",range:c,height:r[0],updateDay:t.updateDay,updateHeight:t.updateHeight,columnId:"0"})];if(i==="month"||i==="day"){g.push(h("taro-picker-group",{mode:"date",range:d,height:r[1],updateDay:t.updateDay,updateHeight:t.updateHeight,columnId:"1"}))}if(i==="day"){g.push(h("taro-picker-group",{mode:"date",range:f,height:r[2],updateDay:t.updateDay,updateHeight:t.updateHeight,columnId:"2"}))}return g}}e.prototype.componentWillLoad=function(){this.isWillLoadCalled=true;this.handleProps()};e.prototype.componentDidLoad=function(){var e=this;Object.defineProperty(this.el,"value",{get:function(){return e.pickerValue},set:function(t){return e.value=t},configurable:true});if(this.overlay){document.body.appendChild(this.overlay)}};e.prototype.disconnectedCallback=function(){var e;if(this.overlay){(e=this.overlay.parentNode)===null||e===void 0?void 0:e.removeChild(this.overlay)}};e.prototype.onPropsChange=function(){if(!this.isWillLoadCalled)return;this.handleProps()};e.prototype.handleProps=function(){var e=this;var t=this,i=t.mode,r=t.start,a=t.end;if(i==="selector"){var n=this.value;this.index=[verifyValue(n,this.range)?Math.floor(n):0]}else if(i==="multiSelector"){var o=this.value;this.index=[];this.range.forEach((function(t,i){var r=o===null||o===void 0?void 0:o[i];var a=verifyValue(r,t)?Math.floor(r):0;e.index.push(a)}))}else if(i==="time"){var n=this.value;if(!verifyTime(n)){console.warn("time picker value illegal");n="0:0"}var u=n.split(":").map((function(e){return+e}));this.index=u}else if(i==="date"){var n=this.value;var s=verifyDate(n)||new Date((new Date).setHours(0,0,0,0));var h=verifyDate(r)||new Date("1970/01/01");var l=verifyDate(a)||new Date("2999/01/01");if(s>=h&&s<=l){var c=s.getFullYear();var d=s.getMonth()+1;var f=s.getDate();var g=getYearRange(h.getFullYear(),l.getFullYear());var p=getMonthRange(h,l,c);var v=getDayRange(h,l,c,d);this.index=[g.indexOf(c),p.indexOf(d),v.indexOf(f)];if(!this.pickerDate||this.pickerDate._value.getTime()!==s.getTime()||this.pickerDate._start.getTime()!==h.getTime()||this.pickerDate._end.getTime()!==l.getTime()){this.pickerDate={_value:s,_start:h,_end:l,_updateValue:[c,d,f]}}}else{throw new Error("Date Interval Error")}}this.height=this.getHeightByIndex();this.pickerValue=this.value;if(i==="date"){var m=this.pickerValue;if(this.fields==="month"){this.pickerValue=m.split("-").slice(0,2).join("-")}else if(this.fields==="year"){this.pickerValue=m.split("-")[0]}}};e.prototype.render=function(){var e=this;var t=this,i=t.name,r=t.mode,a=t.fadeOut,n=t.hidden;var o;switch(r){case"multiSelector":o=this.getMultiSelector();break;case"time":o=this.getTimeSelector();break;case"date":o=this.getDateSelector();break;default:o=this.getSelector()}var u=classnames("weui-mask","weui-animate-fade-in",{"weui-animate-fade-out":a});var s=classnames("weui-picker","weui-animate-slide-up",{"weui-animate-slide-down":a});var l=n?{display:"none"}:{};return h(Host,null,h("div",{onClick:this.showPicker},h("slot",null),h("input",{type:"hidden",name:i,value:formatValue(this.pickerValue)})),h("div",{class:"weui-picker__overlay",style:l,ref:function(t){e.overlay=t}},h("div",{class:u,onClick:this.handleCancel}),h("div",{class:s},h("div",{class:"weui-picker__hd"},h("div",{class:"weui-picker__action",onClick:this.handleCancel},"取消"),h("div",{class:"weui-picker__action",onClick:this.handleChange},"确定")),h("div",{class:"weui-picker__bd"},o),h("input",{type:"hidden",name:i,value:formatValue(this.pickerValue)}))))};Object.defineProperty(e.prototype,"el",{get:function(){return getElement(this)},enumerable:false,configurable:true});Object.defineProperty(e,"watchers",{get:function(){return{mode:["onPropsChange"],value:["onPropsChange"],range:["onPropsChange"],start:["onPropsChange"],end:["onPropsChange"]}},enumerable:false,configurable:true});return e}();Picker.style=indexCss;var TaroPickerGroup=function(){function e(e){registerInstance(this,e);this.range=[]}e.prototype.getPosition=function(){var e=this.touchEnd?.3:0;var t="translate3d(0, "+this.height+"px, 0)";var i="transform "+e+"s";return{transform:t,"-webkit-transform":t,transition:i,"-webkit-transition":i}};e.prototype.formulaUnlimitedScroll=function(e,t,i){var r=this;var a=this,n=a.height,o=a.updateHeight,u=a.columnId;var s=i==="up"?1:-1;this.touchEnd=false;o(-e*s*LINE_HEIGHT+n,u);requestAnimationFrame((function(){r.touchEnd=true;var i=Math.round(t/-LINE_HEIGHT)+e*s;var a=TOP-LINE_HEIGHT*i;o(a,u,true)}))};e.prototype.handleMoveStart=function(e){this.startY=e;this.preY=e;this.hadMove=false};e.prototype.handleMoving=function(e){var t=e;var i=t-this.preY;this.preY=t;this.touchEnd=false;if(Math.abs(t-this.startY)>10)this.hadMove=true;var r=this.height+i;if(this.mode==="time"){if(this.columnId==="0"){if(r>TOP-LINE_HEIGHT*3){r=TOP-LINE_HEIGHT*27+i}if(r<TOP-LINE_HEIGHT*28){r=TOP-LINE_HEIGHT*4+i}}else if(this.columnId==="1"){if(r>TOP-LINE_HEIGHT*3){r=TOP-LINE_HEIGHT*63+i}if(r<TOP-LINE_HEIGHT*64){r=TOP-LINE_HEIGHT*4+i}}}this.updateHeight(r,this.columnId)};e.prototype.handleMoveEnd=function(e){var t=this,i=t.mode,r=t.range,a=t.height,n=t.updateHeight,o=t.onColumnChange,u=t.columnId;var s=0;var h=-LINE_HEIGHT*(r.length-1);var l=e;this.touchEnd=true;var c;if(!this.hadMove){var d=window.innerHeight;var f=d-MASK_HEIGHT/2;c=a-TOP-(l-f);if(i==="time"){if(u==="0"){if(c>-LINE_HEIGHT*2.5){return this.formulaUnlimitedScroll(24,c,"up")}if(c<-LINE_HEIGHT*28.5){return this.formulaUnlimitedScroll(24,c,"down")}}else if(u==="1"){if(c>-LINE_HEIGHT*2.5){return this.formulaUnlimitedScroll(60,c,"up")}if(c<-LINE_HEIGHT*64.5){return this.formulaUnlimitedScroll(60,c,"down")}}}}else{c=a-TOP}if(c>s)c=0;if(c<h)c=h;var g=Math.round(c/-LINE_HEIGHT);var p=TOP-LINE_HEIGHT*g;if(this.mode==="date"){if(this.columnId==="0"){this.updateDay(+this.range[g].replace(/[^0-9]/gi,""),0)}if(this.columnId==="1"){this.updateDay(+this.range[g].replace(/[^0-9]/gi,""),1)}if(this.columnId==="2"){this.updateDay(+this.range[g].replace(/[^0-9]/gi,""),2)}}n(p,u,i==="time");o&&o(p,u)};e.prototype.onMouseDown=function(e){this.isMove=true;this.handleMoveStart(e.clientY)};e.prototype.onMouseMove=function(e){e.preventDefault();if(!this.isMove)return;this.handleMoving(e.clientY)};e.prototype.onMouseMoveEnd=function(e){if(!this.isMove)return;this.isMove=false;this.handleMoveEnd(e.clientY)};e.prototype.onTouchStart=function(e){this.handleMoveStart(e.changedTouches[0].clientY)};e.prototype.onTouchMove=function(e){e.preventDefault();this.handleMoving(e.changedTouches[0].clientY)};e.prototype.onTouchEnd=function(e){this.handleMoveEnd(e.changedTouches[0].clientY)};e.prototype.render=function(){var e=this,t=e.range,i=e.rangeKey;var r=t.map((function(e){var t=i?e[i]:e;return h("div",{class:"weui-picker__item"},t)}));return h(Host,{class:"weui-picker__group"},h("div",{class:"weui-picker__mask"}),h("div",{class:"weui-picker__indicator"}),h("div",{class:"weui-picker__content",style:this.getPosition()},r))};return e}();export{Picker as taro_picker_core,TaroPickerGroup as taro_picker_group};