1 | import styles from './index.less'
|
2 | import 'babel-polyfill';
|
3 |
|
4 |
|
5 | let hour = [1,2,3,4,5,6,7,8,9,10,11,12]
|
6 | let minute = []
|
7 | let second = []
|
8 |
|
9 | for (var i = 1; i <= 60; i++) {
|
10 | minute.push(i)
|
11 | second.push(i)
|
12 | }
|
13 |
|
14 | window.onload = e =>{
|
15 | let input = document.querySelector('#data')
|
16 | input.addEventListener('click',clickEventFunc,false)
|
17 | }
|
18 |
|
19 | let clickEventFunc = e =>{
|
20 | let dataTimePicker = initHTML({
|
21 | hour,minute,second
|
22 | });
|
23 | let sliders =dataTimePicker.children
|
24 | sliders = Array.prototype.slice.call(sliders);
|
25 | sliders.forEach(dom=>{
|
26 | slideEventProxy({
|
27 | event:"touchstart",
|
28 | dom
|
29 | })
|
30 | })
|
31 | document.body.appendChild(dataTimePicker)
|
32 | }
|
33 |
|
34 | let slideEventProxy = args =>{
|
35 | const {
|
36 | event, dom
|
37 | } = args;
|
38 | let eventProxy = touchstart =>{
|
39 | let div = dom.querySelector('span:nth-child(1)')
|
40 | let beforeValue = Number(dom.querySelector('span:nth-child(1)').style.marginTop.match(/\d+/));
|
41 | var lastmousey=touchstart.changedTouches[0].screenY;
|
42 | let touchmoveFunc = touchmove => {
|
43 | let currentMarginTop = -Number(dom.querySelector('span:nth-child(1)').style.marginTop.replace(/(px|rem|%|vw|vh)/,''));
|
44 | let move_coord = touchstart.changedTouches[0].screenY - touchmove.changedTouches[0].screenY;
|
45 | let _move_coord = lastmousey - touchmove.changedTouches[0].screenY;
|
46 | let totalListHeight = div.getBoundingClientRect().height * (dom.children.length-1)
|
47 | if(_move_coord!=0){
|
48 | div.style.marginTop=(-beforeValue-move_coord)+"px";
|
49 | }
|
50 | currentMarginTop = -Number(dom.querySelector('span:nth-child(1)').style.marginTop.replace(/(px|rem|%|vw|vh)/,''));
|
51 | if(_move_coord>0){
|
52 | if( currentMarginTop<0 && move_coord<0){
|
53 | div.style.marginTop = "0px";
|
54 | }else if( currentMarginTop>=totalListHeight && move_coord>0){
|
55 | div.style.marginTop=(-totalListHeight)+"px";
|
56 | }
|
57 | }else if(_move_coord<0){
|
58 | if( currentMarginTop>totalListHeight && move_coord>0 ){
|
59 | div.style.marginTop = (-totalListHeight)+"px";
|
60 | }else if( currentMarginTop<0 && move_coord < 0){
|
61 | div.style.marginTop = "0px";
|
62 | }
|
63 | }
|
64 | window.mouseSpeed = _move_coord
|
65 | lastmousey = touchmove.changedTouches[0].screenY;
|
66 | }
|
67 | document.addEventListener('touchmove',touchmoveFunc,false)
|
68 | let touchendFunc = e => {
|
69 |
|
70 | mouseSpeedLessFunc({
|
71 | mouseSpeed,
|
72 | dom:div
|
73 | })
|
74 | let currentMarginTop = -Number(dom.querySelector('span:nth-child(1)').style.marginTop.replace(/(px|rem|%|vw|vh)/,''));
|
75 | div.style.transition = "all 0.3s cubic-bezier(0, 0.58, 0.46, 0.63)";
|
76 | setTimeout(() => {
|
77 | div.style.transition = "";
|
78 | }, 300);
|
79 | div.style.marginTop = -domRound({
|
80 | currentMarginTop,
|
81 | length:div.getBoundingClientRect().height
|
82 | })+"px";
|
83 | document.removeEventListener('touchmove',touchmoveFunc,false)
|
84 | }
|
85 | document.addEventListener('touchend',touchendFunc,false)
|
86 | setTimeout(() => {
|
87 | document.removeEventListener('touchend',touchendFunc,false)
|
88 | }, 300);
|
89 | }
|
90 | dom.addEventListener(event,eventProxy,false);
|
91 | }
|
92 |
|
93 | let mouseSpeedLessFunc = async e =>{
|
94 | const {
|
95 | dom,mouseSpeed
|
96 | } = e;
|
97 | let beforeValue = Number(dom.style.marginTop.match(/\d+/));
|
98 | let totalListHeight = dom.getBoundingClientRect().height * (dom.parentElement.children.length-1)
|
99 | dom.style.transition = `all ${(Math.abs(mouseSpeed))*10}s cubic-bezier(0.645, 0.045, 0.355, 1)`;
|
100 |
|
101 |
|
102 | if(beforeValue+mouseSpeed*10>totalListHeight-beforeValue){
|
103 | console.log(
|
104 | `当前位置${beforeValue}`,
|
105 | `位移速度${mouseSpeed}`,
|
106 | `总高度${totalListHeight}`,
|
107 | );
|
108 | dom.style.marginTop = -totalListHeight+"px";
|
109 | }else if(beforeValue+mouseSpeed*10<-beforeValue){
|
110 | console.log(22222);
|
111 | dom.style.marginTop = "0px";
|
112 | }else{
|
113 | console.log(
|
114 | `滑动了${beforeValue+mouseSpeed*10}px`
|
115 | );
|
116 | dom.style.marginTop = -beforeValue-mouseSpeed*10+"px";
|
117 | }
|
118 | await sleep(Math.abs(mouseSpeed)*10);
|
119 | }
|
120 |
|
121 | let sleep = ms => new Promise(resolve=>setTimeout(() => resolve, ms))
|
122 |
|
123 |
|
124 | let domRound = args =>{
|
125 | const {
|
126 | length,currentMarginTop
|
127 | } = args;
|
128 | return Math.round(currentMarginTop/length)*length
|
129 | }
|
130 |
|
131 |
|
132 |
|
133 | console.log(
|
134 | reverseString('hello')
|
135 | );
|