UNPKG

4.96 kBJavaScriptView Raw
1import styles from './index.less'
2import 'babel-polyfill';
3
4
5let hour = [1,2,3,4,5,6,7,8,9,10,11,12]
6let minute = []
7let second = []
8
9for (var i = 1; i <= 60; i++) {
10 minute.push(i)
11 second.push(i)
12}
13
14window.onload = e =>{
15 let input = document.querySelector('#data')
16 input.addEventListener('click',clickEventFunc,false)
17}
18
19let 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
34let 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
93let 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
121let sleep = ms => new Promise(resolve=>setTimeout(() => resolve, ms))
122
123
124let domRound = args =>{
125 const {
126 length,currentMarginTop
127 } = args;
128 return Math.round(currentMarginTop/length)*length
129}
130
131
132
133console.log(
134 reverseString('hello')
135);