lex 1 year ago
parent
commit
08fed966c8
66 changed files with 114 additions and 13 deletions
  1. BIN
      src/views/tempo-practice/images/music/f-1.png
  2. BIN
      src/views/tempo-practice/images/music/f-10.png
  3. BIN
      src/views/tempo-practice/images/music/f-11.png
  4. BIN
      src/views/tempo-practice/images/music/f-12.png
  5. BIN
      src/views/tempo-practice/images/music/f-13.png
  6. BIN
      src/views/tempo-practice/images/music/f-14.png
  7. BIN
      src/views/tempo-practice/images/music/f-15.png
  8. BIN
      src/views/tempo-practice/images/music/f-16.png
  9. BIN
      src/views/tempo-practice/images/music/f-17.png
  10. BIN
      src/views/tempo-practice/images/music/f-18.png
  11. BIN
      src/views/tempo-practice/images/music/f-19.png
  12. BIN
      src/views/tempo-practice/images/music/f-2.png
  13. BIN
      src/views/tempo-practice/images/music/f-20.png
  14. BIN
      src/views/tempo-practice/images/music/f-21.png
  15. BIN
      src/views/tempo-practice/images/music/f-22.png
  16. BIN
      src/views/tempo-practice/images/music/f-23.png
  17. BIN
      src/views/tempo-practice/images/music/f-24.png
  18. BIN
      src/views/tempo-practice/images/music/f-25.png
  19. BIN
      src/views/tempo-practice/images/music/f-26.png
  20. BIN
      src/views/tempo-practice/images/music/f-27.png
  21. BIN
      src/views/tempo-practice/images/music/f-28.png
  22. BIN
      src/views/tempo-practice/images/music/f-29.png
  23. BIN
      src/views/tempo-practice/images/music/f-3.png
  24. BIN
      src/views/tempo-practice/images/music/f-30.png
  25. BIN
      src/views/tempo-practice/images/music/f-31.png
  26. BIN
      src/views/tempo-practice/images/music/f-4.png
  27. BIN
      src/views/tempo-practice/images/music/f-5.png
  28. BIN
      src/views/tempo-practice/images/music/f-6.png
  29. BIN
      src/views/tempo-practice/images/music/f-7.png
  30. BIN
      src/views/tempo-practice/images/music/f-8.png
  31. BIN
      src/views/tempo-practice/images/music/f-9.png
  32. BIN
      src/views/tempo-practice/images/music/j-1.png
  33. BIN
      src/views/tempo-practice/images/music/j-10.png
  34. BIN
      src/views/tempo-practice/images/music/j-11.png
  35. BIN
      src/views/tempo-practice/images/music/j-12.png
  36. BIN
      src/views/tempo-practice/images/music/j-13.png
  37. BIN
      src/views/tempo-practice/images/music/j-14.png
  38. BIN
      src/views/tempo-practice/images/music/j-15.png
  39. BIN
      src/views/tempo-practice/images/music/j-16.png
  40. BIN
      src/views/tempo-practice/images/music/j-17.png
  41. BIN
      src/views/tempo-practice/images/music/j-18.png
  42. BIN
      src/views/tempo-practice/images/music/j-19.png
  43. BIN
      src/views/tempo-practice/images/music/j-2.png
  44. BIN
      src/views/tempo-practice/images/music/j-20.png
  45. BIN
      src/views/tempo-practice/images/music/j-21.png
  46. BIN
      src/views/tempo-practice/images/music/j-22.png
  47. BIN
      src/views/tempo-practice/images/music/j-23.png
  48. BIN
      src/views/tempo-practice/images/music/j-24.png
  49. BIN
      src/views/tempo-practice/images/music/j-25.png
  50. BIN
      src/views/tempo-practice/images/music/j-26.png
  51. BIN
      src/views/tempo-practice/images/music/j-27.png
  52. BIN
      src/views/tempo-practice/images/music/j-28.png
  53. BIN
      src/views/tempo-practice/images/music/j-29.png
  54. BIN
      src/views/tempo-practice/images/music/j-3.png
  55. BIN
      src/views/tempo-practice/images/music/j-30.png
  56. BIN
      src/views/tempo-practice/images/music/j-31.png
  57. BIN
      src/views/tempo-practice/images/music/j-4.png
  58. BIN
      src/views/tempo-practice/images/music/j-5.png
  59. BIN
      src/views/tempo-practice/images/music/j-6.png
  60. BIN
      src/views/tempo-practice/images/music/j-7.png
  61. BIN
      src/views/tempo-practice/images/music/j-8.png
  62. BIN
      src/views/tempo-practice/images/music/j-9.png
  63. 34 0
      src/views/tempo-practice/index.module.less
  64. 36 13
      src/views/tempo-practice/index.tsx
  65. 14 0
      src/views/tempo-practice/setting-modal/index.module.less
  66. 30 0
      src/views/tempo-practice/setting.ts

BIN
src/views/tempo-practice/images/music/f-1.png


BIN
src/views/tempo-practice/images/music/f-10.png


BIN
src/views/tempo-practice/images/music/f-11.png


BIN
src/views/tempo-practice/images/music/f-12.png


BIN
src/views/tempo-practice/images/music/f-13.png


BIN
src/views/tempo-practice/images/music/f-14.png


BIN
src/views/tempo-practice/images/music/f-15.png


BIN
src/views/tempo-practice/images/music/f-16.png


BIN
src/views/tempo-practice/images/music/f-17.png


BIN
src/views/tempo-practice/images/music/f-18.png


BIN
src/views/tempo-practice/images/music/f-19.png


BIN
src/views/tempo-practice/images/music/f-2.png


BIN
src/views/tempo-practice/images/music/f-20.png


BIN
src/views/tempo-practice/images/music/f-21.png


BIN
src/views/tempo-practice/images/music/f-22.png


BIN
src/views/tempo-practice/images/music/f-23.png


BIN
src/views/tempo-practice/images/music/f-24.png


BIN
src/views/tempo-practice/images/music/f-25.png


BIN
src/views/tempo-practice/images/music/f-26.png


BIN
src/views/tempo-practice/images/music/f-27.png


BIN
src/views/tempo-practice/images/music/f-28.png


BIN
src/views/tempo-practice/images/music/f-29.png


BIN
src/views/tempo-practice/images/music/f-3.png


BIN
src/views/tempo-practice/images/music/f-30.png


BIN
src/views/tempo-practice/images/music/f-31.png


BIN
src/views/tempo-practice/images/music/f-4.png


BIN
src/views/tempo-practice/images/music/f-5.png


BIN
src/views/tempo-practice/images/music/f-6.png


BIN
src/views/tempo-practice/images/music/f-7.png


BIN
src/views/tempo-practice/images/music/f-8.png


BIN
src/views/tempo-practice/images/music/f-9.png


BIN
src/views/tempo-practice/images/music/j-1.png


BIN
src/views/tempo-practice/images/music/j-10.png


BIN
src/views/tempo-practice/images/music/j-11.png


BIN
src/views/tempo-practice/images/music/j-12.png


BIN
src/views/tempo-practice/images/music/j-13.png


BIN
src/views/tempo-practice/images/music/j-14.png


BIN
src/views/tempo-practice/images/music/j-15.png


BIN
src/views/tempo-practice/images/music/j-16.png


BIN
src/views/tempo-practice/images/music/j-17.png


BIN
src/views/tempo-practice/images/music/j-18.png


BIN
src/views/tempo-practice/images/music/j-19.png


BIN
src/views/tempo-practice/images/music/j-2.png


BIN
src/views/tempo-practice/images/music/j-20.png


BIN
src/views/tempo-practice/images/music/j-21.png


BIN
src/views/tempo-practice/images/music/j-22.png


BIN
src/views/tempo-practice/images/music/j-23.png


BIN
src/views/tempo-practice/images/music/j-24.png


BIN
src/views/tempo-practice/images/music/j-25.png


BIN
src/views/tempo-practice/images/music/j-26.png


BIN
src/views/tempo-practice/images/music/j-27.png


BIN
src/views/tempo-practice/images/music/j-28.png


BIN
src/views/tempo-practice/images/music/j-29.png


BIN
src/views/tempo-practice/images/music/j-3.png


BIN
src/views/tempo-practice/images/music/j-30.png


BIN
src/views/tempo-practice/images/music/j-31.png


BIN
src/views/tempo-practice/images/music/j-4.png


BIN
src/views/tempo-practice/images/music/j-5.png


BIN
src/views/tempo-practice/images/music/j-6.png


BIN
src/views/tempo-practice/images/music/j-7.png


BIN
src/views/tempo-practice/images/music/j-8.png


BIN
src/views/tempo-practice/images/music/j-9.png


+ 34 - 0
src/views/tempo-practice/index.module.less

@@ -116,6 +116,8 @@
       cursor: pointer;
       margin: 0 7px;
 
+
+
       &::before,
       &::after {
         width: 19px;
@@ -139,6 +141,24 @@
     border-radius: 14px;
     border: 3px solid #fff;
     background: #FFFFFF;
+    position: relative;
+
+    .direction {
+      position: absolute;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      top: 0;
+      display: flex;
+      align-items: center;
+      flex-direction: column;
+      z-index: 9;
+
+      &>div {
+        width: 100%;
+        flex: 1;
+      }
+    }
 
     &.active {
       border: 3px solid rgba(255, 167, 0, 1);
@@ -274,6 +294,20 @@
       max-height: 200px;
       box-shadow: none;
       overflow-y: auto;
+
+      &::-webkit-scrollbar {
+        width: 4px;
+      }
+
+      &::-webkit-scrollbar-thumb {
+        border-radius: 10px;
+        background: rgba(0, 0, 0, 0.2);
+      }
+
+      &::-webkit-scrollbar-track {
+        border-radius: 0;
+        background: rgba(0, 0, 0, 0.1);
+      }
     }
 
     .van-popover__action {

+ 36 - 13
src/views/tempo-practice/index.tsx

@@ -16,7 +16,12 @@ import j1 from './images/music/j-1.png';
 // import j2 from './images/music/j-2.png';
 import { Popover, Popup, showToast } from 'vant';
 import SettingModal from './setting-modal';
-import { randomScoreElement, renderScore, setting } from './setting';
+import {
+  randomScoreElement,
+  renderScore,
+  setting,
+  elementDirection
+} from './setting';
 import { handleStartTick, hendleEndTick } from './tick';
 import { handleStartBeat, hendleEndBeat } from './beat-tick';
 import { browser } from '@/helpers/utils';
@@ -131,19 +136,37 @@ export default defineComponent({
                     item.length !== 1 &&
                     styles.small
                 ]}>
-                {item.map((child: any, j: number) => (
+                {item.map((child: any, jIndex: number) => (
                   <div
-                    class={[styles.beat, child.selected ? styles.active : '']}
-                    onClick={() => {
-                      if (setting.playState === 'play') return;
-                      if (setting.tempo.length <= 1) {
-                        showToast('无法切换,请选择至少2种节奏型');
-                        return;
-                      }
-                      const obj = randomScoreElement(child.index);
-                      child.index = obj.index;
-                      child.url = obj.url;
-                    }}>
+                    class={[styles.beat, child.selected ? styles.active : '']}>
+                    <div class={styles.direction}>
+                      <div
+                        class={styles.up}
+                        onClick={() => {
+                          if (setting.playState === 'play') return;
+                          if (setting.tempo.length <= 1) {
+                            showToast('无法切换,请选择至少2种节奏型');
+                            return;
+                          }
+                          // const obj = randomScoreElement(child.index);
+                          const obj = elementDirection('up', child.index);
+                          child.index = obj.index;
+                          child.url = obj.url;
+                        }}></div>
+                      <div
+                        class={styles.down}
+                        onClick={() => {
+                          if (setting.playState === 'play') return;
+                          if (setting.tempo.length <= 1) {
+                            showToast('无法切换,请选择至少2种节奏型');
+                            return;
+                          }
+                          // const obj = randomScoreElement(child.index);
+                          const obj = elementDirection('down', child.index);
+                          child.index = obj.index;
+                          child.url = obj.url;
+                        }}></div>
+                    </div>
                     <div class={styles.imgSection}>
                       <img src={getImage(child.url)} />
                     </div>

+ 14 - 0
src/views/tempo-practice/setting-modal/index.module.less

@@ -33,6 +33,20 @@
   padding: 0 26px;
   overflow-y: auto;
   height: 100%;
+
+  &::-webkit-scrollbar {
+    width: 4px;
+  }
+
+  &::-webkit-scrollbar-thumb {
+    border-radius: 10px;
+    background: rgba(0, 0, 0, 0.2);
+  }
+
+  &::-webkit-scrollbar-track {
+    border-radius: 0;
+    background: rgba(0, 0, 0, 0.1);
+  }
 }
 
 .settingParams {

+ 30 - 0
src/views/tempo-practice/setting.ts

@@ -80,6 +80,36 @@ export const randomScoreElement = (element?: string) => {
   }
 };
 
+/** 设置元素方向 */
+export const elementDirection = (type: string, index) => {
+  const prefix = setting.element === 'jianpu' ? 'j-' : 'f-';
+  let ele = '';
+  let i = index;
+  const tempoList = setting.tempo;
+  if (type === 'up') {
+    if (index <= 0) {
+      ele = tempoList[tempoList.length - 1];
+      i = tempoList.length - 1;
+    } else {
+      ele = tempoList[index - 1];
+      i = index - 1;
+    }
+  } else if (type === 'down') {
+    if (index >= tempoList.length - 1) {
+      ele = tempoList[0];
+      i = 0;
+    } else {
+      ele = tempoList[index + 1];
+      i = index + 1;
+    }
+  }
+
+  return {
+    url: prefix + ele + '.png',
+    index: i
+  };
+};
+
 /** 生成谱面 */
 export const renderScore = () => {
   const barLine = Number(setting.barLine);