瀏覽代碼

历史回顾:时间刻度和齿轮

任一存 2 年之前
父節點
當前提交
83de8ef8ed
共有 28 個文件被更改,包括 51 次插入71 次删除
  1. 二進制
      src/assets/images/gear-clockwise.png
  2. 二進制
      src/assets/images/gear-counterclockwise.png
  3. 二進制
      src/assets/images/gear-idle.png
  4. 二進制
      src/assets/images/gear/表盘1_00000.png
  5. 二進制
      src/assets/images/gear/表盘1_00001.png
  6. 二進制
      src/assets/images/gear/表盘1_00002.png
  7. 二進制
      src/assets/images/gear/表盘1_00003.png
  8. 二進制
      src/assets/images/gear/表盘1_00004.png
  9. 二進制
      src/assets/images/gear/表盘1_00005.png
  10. 二進制
      src/assets/images/gear/表盘1_00006.png
  11. 二進制
      src/assets/images/gear/表盘1_00007.png
  12. 二進制
      src/assets/images/gear/表盘1_00008.png
  13. 二進制
      src/assets/images/gear/表盘1_00009.png
  14. 二進制
      src/assets/images/gear/表盘1_00010.png
  15. 二進制
      src/assets/images/gear/表盘1_00011.png
  16. 二進制
      src/assets/images/gear/表盘1_00012.png
  17. 二進制
      src/assets/images/gear/表盘1_00013.png
  18. 二進制
      src/assets/images/gear/表盘1_00014.png
  19. 二進制
      src/assets/images/gear/表盘1_00015.png
  20. 二進制
      src/assets/images/gear/表盘1_00016.png
  21. 二進制
      src/assets/images/gear/表盘1_00017.png
  22. 二進制
      src/assets/images/gear/表盘1_00018.png
  23. 二進制
      src/assets/images/gear/表盘1_00019.png
  24. 二進制
      src/assets/images/gear/表盘1_00020.png
  25. 二進制
      src/assets/images/gear/表盘1_00021.png
  26. 二進制
      src/assets/images/gear/表盘1_00022.png
  27. 二進制
      src/assets/images/gear/表盘1_00023.png
  28. 51 71
      src/views/HistoryNew.vue

二進制
src/assets/images/gear-clockwise.png


二進制
src/assets/images/gear-counterclockwise.png


二進制
src/assets/images/gear-idle.png


二進制
src/assets/images/gear/表盘1_00000.png


二進制
src/assets/images/gear/表盘1_00001.png


二進制
src/assets/images/gear/表盘1_00002.png


二進制
src/assets/images/gear/表盘1_00003.png


二進制
src/assets/images/gear/表盘1_00004.png


二進制
src/assets/images/gear/表盘1_00005.png


二進制
src/assets/images/gear/表盘1_00006.png


二進制
src/assets/images/gear/表盘1_00007.png


二進制
src/assets/images/gear/表盘1_00008.png


二進制
src/assets/images/gear/表盘1_00009.png


二進制
src/assets/images/gear/表盘1_00010.png


二進制
src/assets/images/gear/表盘1_00011.png


二進制
src/assets/images/gear/表盘1_00012.png


二進制
src/assets/images/gear/表盘1_00013.png


二進制
src/assets/images/gear/表盘1_00014.png


二進制
src/assets/images/gear/表盘1_00015.png


二進制
src/assets/images/gear/表盘1_00016.png


二進制
src/assets/images/gear/表盘1_00017.png


二進制
src/assets/images/gear/表盘1_00018.png


二進制
src/assets/images/gear/表盘1_00019.png


二進制
src/assets/images/gear/表盘1_00020.png


二進制
src/assets/images/gear/表盘1_00021.png


二進制
src/assets/images/gear/表盘1_00022.png


二進制
src/assets/images/gear/表盘1_00023.png


+ 51 - 71
src/views/HistoryNew.vue

@@ -11,23 +11,8 @@
       @click="doTest"
     >
       <img
-        v-show="gearStatus==='idle'"
-        class="gear gear-static-1"
-        src="@/assets/images/gear-idle.png"
-        alt=""
-        draggable="false"
-      >
-      <img
-        v-show="gearStatus==='clockwise'"
-        class="gear gear-clockwise"
-        src="@/assets/images/gear-clockwise.png"
-        alt=""
-        draggable="false"
-      >
-      <img
-        v-show="gearStatus==='countercockwise'"
-        class="gear gear-counterclockwise"
-        src="@/assets/images/gear-counterclockwise.png"
+        class="gear"
+        :src="require(`@/assets/images/gear/表盘1_${gearFrameIdx.toString().padStart(5, '0')}.png`)"
         alt=""
         draggable="false"
       >
@@ -35,28 +20,30 @@
     <div
       class="time-axis-wrap"
       :style="{
-        left: timeAxisLeft,
+        left: `${timeAxisLeft}px`,
       }"
     >
-      <img
-        class="time-axis one"
-        src="@/assets/images/time-axis.png"
-        alt=""
-        draggable="false"
-      >
-      <img
-        class="time-axis two"
-        src="@/assets/images/time-axis.png"
-        alt=""
-        draggable="false"
-      >
+      <div
+        v-for="index in timeAxisScaleRepeat"
+        :key="index"
+        class="scale-line"
+        :style="{
+          width: `${timeAxisScaleWidth}px`,
+          marginRight: `${timeAxisScaleMargin}px`,
+          opacity: computeTimeAxisScaleOpacity(index),
+        }"
+      />
+      <div
+        v-for="index in timeAxisScaleRepeat"
+        :key="index"
+        class="scale-line"
+        :style="{
+          width: `${timeAxisScaleWidth}px`,
+          marginRight: `${timeAxisScaleMargin}px`,
+          opacity: computeTimeAxisScaleOpacity(index + timeAxisScaleRepeat),
+        }"
+      />
     </div>
-    <div
-      class="test"
-      :style="{
-        left: testLeft,
-      }"
-    />
   </div>
 </template>
 
@@ -151,23 +138,19 @@ export default {
       lastMoveEventTimeStamp.value = 0
       lastAnimationTimeStamp = Date.now()
       lastTouchPos.value = e.changedTouches[0].clientX
-      console.log('start!')
     }
     function onTouchEnd(e) {
       isMouseDown.value = false
-      console.log('end!')
     }
     function onTouchCancel() {
       isMouseDown.value = false
     }
     function onTouchMove(e) {
-      console.log('move!')
       if (isMouseDown.value && e.changedTouches.length === 1) {
         // 疯狂操作的极端情况下两个时间戳之间的时差会不合理,甚至为0
         if (lastMoveEventTimeStamp.value && (e.timeStamp - lastMoveEventTimeStamp.value > 1)) {
           // 更新speed
-          console.log('shabi')
-          const currentMoveSpeed = - (e.changedTouches[0].clientX - lastTouchPos.value) / (e.timeStamp - lastMoveEventTimeStamp.value) * 0.5
+          const currentMoveSpeed = - (e.changedTouches[0].clientX - lastTouchPos.value) / (e.timeStamp - lastMoveEventTimeStamp.value) * 1
           moveSpeed.value = moveSpeed.value * 0.9 + currentMoveSpeed * 0.1
           lastTouchPos.value = e.changedTouches[0].clientX
         }
@@ -207,7 +190,6 @@ export default {
         translateLength.value = maxTranslateLength.value
         moveSpeed.value = 0
       }
-      console.log(translateLength.value)
       lastAnimationTimeStamp = timeStamp
       animationFrameId = requestAnimationFrame(animationFrameTask)
     }
@@ -232,38 +214,41 @@ export default {
       immediate: true,
     })
 
-    const testSpeedRate = 1
-    const initialTestLeft = `1000px`
-    const testLeft = ref(initialTestLeft)
+    // 时间轴
+    const timeAxisLeft = ref(0)
+    const timeAxisScaleWidth = 2
+    const timeAxisScaleMargin = 120
+    const timeAxisScaleRepeat = 20
     watch(translateLength, (vNew) => {
-      console.log('sdjgflksklfg', vNew)
-      testLeft.value = `calc(${initialTestLeft} - ${vNew * testSpeedRate}px)`
+      timeAxisLeft.value = -(vNew % ((timeAxisScaleWidth + timeAxisScaleMargin) * timeAxisScaleRepeat))
     })
+    const windowCenterX = window.innerWidth / 2
+    function computeTimeAxisScaleOpacity(index) { // 注意index是从1开始的
+      const scaleCenterXInWindow = (timeAxisScaleWidth + timeAxisScaleMargin) * (index - 1) + timeAxisScaleWidth / 2 + timeAxisLeft.value
+      return String(Math.max(1 - Math.abs(windowCenterX - scaleCenterXInWindow) / (windowCenterX), 0))
+    }
 
-    // 时间轴位移
-    const timeAxisLeft = ref('0px')
+    // 齿轮
+    const gearFrameNumberTotal = 24
+    const gearFrameIdx = ref(0)
+    const gearFrameNumberPerScale = 3
+    const translateLengthPerGrearFrame = (timeAxisScaleWidth + timeAxisScaleMargin) / gearFrameNumberPerScale
     watch(translateLength, (vNew) => {
-      timeAxisLeft.value = `${-(vNew % 1920)}px`
+      const framePassed = Math.round(translateLength.value / translateLengthPerGrearFrame)
+      gearFrameIdx.value = framePassed % gearFrameNumberTotal
     })
 
-    // 齿轮
-    const gearStatus = ref('idle')
-    function doTest() {
-      gearStatus.value = 'clockwise'
-      setTimeout(() => {
-        gearStatus.value = 'idle'
-      }, 2000)
-    }
-
     return {
       onTouchStart,
       onTouchEnd,
       onTouchCancel,
       onTouchMove,
-      testLeft,
       timeAxisLeft,
-      gearStatus,
-      doTest,
+      timeAxisScaleWidth,
+      timeAxisScaleMargin,
+      timeAxisScaleRepeat,
+      computeTimeAxisScaleOpacity,
+      gearFrameIdx,
     }
   }
 }
@@ -287,18 +272,13 @@ export default {
     }
   }
   >.time-axis-wrap{
-    top: 54%;
+    bottom: 32.4%;
     position: absolute;
     display: flex;
-    >.time-axis{
-      width: 1920px;
+    >.scale-line{
+      height: 30px;
+      background-color: #91886b;
     }
   }
-  >.test{
-    position: absolute;
-    width: 100px;
-    height: 100px;
-    background-color: red;
-  }
 }
 </style>