@shijiu/jsview-vue 0.9.502 → 0.9.631

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
  2. package/dom/bin/jsview-dom.min.js +1 -1
  3. package/dom/target_core_revision.js +4 -3
  4. package/index.js +10 -0
  5. package/package.json +8 -1
  6. package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +16 -5
  7. package/samples/AnimPicture/App.vue +89 -106
  8. package/samples/Basic/App.vue +65 -68
  9. package/samples/Basic/components/ContentBlock.vue +31 -36
  10. package/samples/Basic/components/anim/AnimGroup.vue +61 -75
  11. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +54 -43
  12. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +25 -31
  13. package/samples/Basic/components/anim/AnimTransition.vue +142 -105
  14. package/samples/Basic/components/div/DivBackground.vue +38 -16
  15. package/samples/Basic/components/div/DivClip.vue +143 -78
  16. package/samples/Basic/components/div/DivCssScoped.vue +10 -10
  17. package/samples/Basic/components/div/DivCssVar.vue +40 -42
  18. package/samples/Basic/components/div/DivGroup1.vue +45 -39
  19. package/samples/Basic/components/div/DivGroup2.vue +56 -45
  20. package/samples/Basic/components/div/DivLayout.vue +63 -5
  21. package/samples/Basic/components/div/DivRadius.vue +51 -42
  22. package/samples/Basic/components/div/DivTransform.vue +21 -16
  23. package/samples/Basic/components/panel/Panel1.vue +46 -44
  24. package/samples/Basic/components/panel/Panel2.vue +22 -26
  25. package/samples/Basic/components/panel/TitleBar.vue +12 -12
  26. package/samples/Basic/components/text/TextAlign.vue +54 -44
  27. package/samples/Basic/components/text/TextEmoji.vue +16 -20
  28. package/samples/Basic/components/text/TextFontStyle.vue +77 -53
  29. package/samples/Basic/components/text/TextGroup1.vue +46 -38
  30. package/samples/Basic/components/text/TextGroup2.vue +25 -28
  31. package/samples/Basic/components/text/TextOverflow.vue +78 -59
  32. package/samples/BasicFocusControl/App.vue +22 -43
  33. package/samples/BasicFocusControl/components/BaseBlock.vue +42 -43
  34. package/samples/BasicFocusControl/components/MainArea.vue +55 -70
  35. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +11 -15
  36. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +21 -24
  37. package/samples/BasicFocusControl/components/SideBar.vue +32 -47
  38. package/samples/BasicFocusControl/components/SideBarBlock.vue +20 -23
  39. package/samples/Collision/App.vue +452 -0
  40. package/samples/ColorSpace/App.vue +15 -24
  41. package/samples/DemoHomepage/App.vue +7 -11
  42. package/samples/DemoHomepage/components/BodyFrame.vue +21 -9
  43. package/samples/DemoHomepage/components/TabFrame.vue +7 -8
  44. package/samples/DemoHomepage/router.js +52 -33
  45. package/samples/DemoHomepage/views/Homepage.vue +18 -9
  46. package/samples/FilterDemo/AnimatePic.vue +58 -0
  47. package/samples/FilterDemo/App.vue +99 -61
  48. package/samples/FilterDemo/VideoLayer.vue +62 -0
  49. package/samples/FlipCard/App.vue +32 -41
  50. package/samples/FlipCard/FlipCard.vue +48 -54
  51. package/samples/GridDemo/App.vue +109 -77
  52. package/samples/GridDemo/ButtonBlock.vue +50 -49
  53. package/samples/GridDemo/FocusItem.vue +19 -38
  54. package/samples/GridDemo/Item.vue +46 -54
  55. package/samples/HashHistory/App.vue +63 -79
  56. package/samples/HashHistory/components/HorizontalButtonList.vue +72 -95
  57. package/samples/HashHistory/components/Item.vue +42 -56
  58. package/samples/HashHistory/router.js +23 -12
  59. package/samples/HashHistory/views/MainPage.vue +35 -46
  60. package/samples/HashHistory/views/SubPage.vue +34 -47
  61. package/samples/ImpactStop/App.vue +435 -0
  62. package/samples/Input/App.vue +8 -18
  63. package/samples/Input/FullKeyboard.vue +2 -6
  64. package/samples/Input/InputPanel.vue +18 -12
  65. package/samples/Input/KeyboardItem.vue +1 -1
  66. package/samples/LongImage/App.vue +11 -27
  67. package/samples/LongImage/Button.vue +50 -145
  68. package/samples/LongImage/ButtonItem.vue +44 -0
  69. package/samples/LongImage/LongImageScroll.vue +71 -106
  70. package/samples/LongImage/Scroll.vue +7 -9
  71. package/samples/LongText/App.vue +13 -28
  72. package/samples/LongText/Button.vue +43 -145
  73. package/samples/LongText/ButtonItem.vue +44 -0
  74. package/samples/LongText/LongTextScroll.vue +68 -101
  75. package/samples/LongText/Scroll.vue +7 -9
  76. package/samples/Marquee/App.vue +34 -37
  77. package/samples/MaskClip/App.vue +17 -30
  78. package/samples/MetroWidgetDemos/Advanced/App.vue +47 -0
  79. package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +90 -0
  80. package/samples/MetroWidgetDemos/Advanced/Buttons.vue +70 -0
  81. package/samples/MetroWidgetDemos/Advanced/Mixed.vue +77 -0
  82. package/samples/MetroWidgetDemos/Advanced/Widgets.vue +71 -0
  83. package/samples/MetroWidgetDemos/Item.vue +67 -0
  84. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/App.vue +80 -104
  85. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/Item.vue +7 -0
  86. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/bg.jpg +0 -0
  87. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_content.png +0 -0
  88. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_left.png +0 -0
  89. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_mid.png +0 -0
  90. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_right.png +0 -0
  91. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/focus_border.png +0 -0
  92. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/holder_logo.png +0 -0
  93. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/jrbm.png +0 -0
  94. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_left.png +0 -0
  95. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_mid.png +0 -0
  96. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_right.png +0 -0
  97. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/loading.png +0 -0
  98. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/logo.png +0 -0
  99. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/mcjx.png +0 -0
  100. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tao.png +0 -0
  101. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tmall.png +0 -0
  102. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/border.png +0 -0
  103. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/ContentItem.vue +60 -86
  104. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/MyTab.vue +0 -0
  105. package/samples/MetroWidgetDemos/PerformanceTest/data.js +45 -0
  106. package/samples/MetroWidgetDemos/PingPong/App.vue +135 -0
  107. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +73 -0
  108. package/samples/MetroWidgetDemos/PingPong/AppTab.vue +62 -0
  109. package/samples/MetroWidgetDemos/PingPong/TabItem.vue +84 -0
  110. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +214 -0
  111. package/samples/MetroWidgetDemos/Simple/AbsoluteTemplate.vue +75 -0
  112. package/samples/MetroWidgetDemos/Simple/App.vue +45 -0
  113. package/samples/MetroWidgetDemos/Simple/RelativeTemplate.vue +111 -0
  114. package/samples/MetroWidgetDemos/WidgetItem.vue +89 -0
  115. package/samples/MetroWidgetDemos/data.js +204 -0
  116. package/samples/NinePatchDemo/App.vue +114 -115
  117. package/samples/NinePatchDemo/Item.vue +7 -8
  118. package/samples/Preload/App.vue +67 -64
  119. package/samples/Preload/Item.vue +21 -29
  120. package/samples/QrcodeDemo/App.vue +24 -29
  121. package/samples/SoundPool/App.vue +77 -106
  122. package/samples/SprayView/App.vue +10 -8
  123. package/samples/SpriteImage/App.vue +1 -2
  124. package/samples/TextBox/App.vue +86 -101
  125. package/samples/TextBox/RenderCenter.vue +1 -1
  126. package/samples/TextBox/RenderLeft.vue +1 -1
  127. package/samples/TextBox/RenderOneLine.vue +1 -1
  128. package/samples/TextBox/RenderRight.vue +1 -1
  129. package/samples/TextShadowDemo/App.vue +1 -2
  130. package/samples/TextureAnimation/App.vue +16 -13
  131. package/samples/TextureAnimation/App2.vue +111 -0
  132. package/samples/TextureAnimation/assets/blackWhiteGrid.png +0 -0
  133. package/samples/TextureAnimation/assets/light.png +0 -0
  134. package/samples/TextureAnimation/assets/light2.png +0 -0
  135. package/samples/TextureAnimation/assets/mask.png +0 -0
  136. package/samples/TextureSize/App.vue +15 -25
  137. package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
  138. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
  139. package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
  140. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
  141. package/samples/TouchSample/App.vue +2 -3
  142. package/samples/TouchSample/Item.vue +15 -13
  143. package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
  144. package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
  145. package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
  146. package/samples/TouchSample/TouchContainerVertical.vue +3 -2
  147. package/samples/TransitPage/App.vue +20 -32
  148. package/samples/VideoDemo/App.vue +65 -81
  149. package/samples/VideoDemo/components/Button.vue +41 -52
  150. package/samples/VideoDemo/components/Controllor.vue +171 -169
  151. package/samples/VideoDemo/components/VideoFrame.vue +87 -99
  152. package/samples/VisibleSensorDemo/App.vue +234 -0
  153. package/scripts/jsview-jsmap-serve.js +42 -0
  154. package/scripts/jsview-post-install.js +1 -1
  155. package/tsconfig.json +3 -0
  156. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
  157. package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
  158. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1561 -1656
  159. package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
  160. package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
  161. package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
  162. package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
  163. package/utils/JsViewEngineWidget/index.js +4 -4
  164. package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
  165. package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +301 -58
  166. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +22 -3
  167. package/utils/JsViewPlugin/JsvPlayer/index.js +8 -1
  168. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  169. package/utils/JsViewVueTools/JsvImpactTracer.js +113 -0
  170. package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
  171. package/utils/JsViewVueTools/index.js +20 -0
  172. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +11 -1
  173. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +8 -4
  174. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserTextureAnim.vue +203 -14
  175. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +2 -2
  176. package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +2 -2
  177. package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
  178. package/utils/JsViewVueWidget/JsvGrid.vue +139 -41
  179. package/utils/JsViewVueWidget/JsvInput/Cursor.vue +4 -2
  180. package/utils/JsViewVueWidget/JsvInput/JsvInput.vue +13 -12
  181. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
  182. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
  183. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  184. package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
  185. package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
  186. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +39 -53
  187. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +1 -1
  188. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
  189. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +282 -285
  190. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
  191. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +6 -1
  192. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +6 -1
  193. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +142 -61
  194. package/utils/JsViewVueWidget/JsvTextureAnim/index.js +9 -5
  195. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
  196. package/utils/JsViewVueWidget/JsvVideo.vue +9 -12
  197. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
  198. package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
  199. package/utils/JsViewVueWidget/index.js +42 -0
  200. package/samples/AdvanceMetroWidget/App.vue +0 -123
  201. package/samples/AdvanceMetroWidget/Frame.vue +0 -102
  202. package/samples/AdvanceMetroWidget/Item.vue +0 -63
  203. package/samples/AdvanceMetroWidget/data.js +0 -137
  204. package/samples/ClassNameDemo/App.vue +0 -119
  205. package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
  206. package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
  207. package/samples/ClassNameDemo/components/TitleView.vue +0 -24
  208. package/samples/ClassNameDemo/data.js +0 -24
  209. package/samples/FlowMultiWidget/App.vue +0 -91
  210. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  211. package/samples/FlowMultiWidget/components/Block.vue +0 -107
  212. package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
  213. package/samples/FlowMultiWidget/components/Item.vue +0 -103
  214. package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
  215. package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
  216. package/samples/FlowMultiWidget/data.js +0 -446
  217. package/samples/HashHistory/views/BasePage.vue +0 -19
  218. package/samples/HashHistory/views/SubPageFirst.vue +0 -10
  219. package/samples/HashHistory/views/SubPageSecond.vue +0 -10
  220. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  221. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  222. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  223. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  224. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  225. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  226. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  227. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  228. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  229. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  230. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  231. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  232. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  233. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  234. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  235. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  236. package/samples/SimpleWidgetDemo/data.js +0 -124
  237. package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
  238. package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
  239. package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
  240. package/utils/JsViewEngineWidget/MetroWidget/RootView.vue +0 -154
@@ -33,7 +33,6 @@
33
33
  * 功能: 停止精灵图动画,可选择静止在第一帧或最后一帧
34
34
  -->
35
35
  <script>
36
- import {Options, Vue} from "vue-class-component";
37
36
  import { getKeyFramesGroup } from '../../JsViewVueTools/JsvDynamicKeyFrames.js'
38
37
 
39
38
 
@@ -71,7 +70,7 @@ function _createTransformStyle(w_scale, h_scale, x, y) {
71
70
  return output;
72
71
  }
73
72
 
74
- @Options({
73
+ export default {
75
74
  props: {
76
75
  spriteInfo: Object,
77
76
  viewSize: Object,
@@ -82,11 +81,9 @@ function _createTransformStyle(w_scale, h_scale, x, y) {
82
81
  loop: Number,
83
82
  spriteName: String,
84
83
  controller: Object,
85
- }
86
- })
87
- class JsvSpriteAnim extends Vue {
88
- constructor(props) {
89
- super(props);
84
+ },
85
+
86
+ created() {
90
87
  let stopFrame = "start";
91
88
  if (typeof this.$props.autostart === "string" && this.$props.autostart !== "none") {
92
89
  stopFrame = this.$props.autostart;
@@ -122,315 +119,315 @@ class JsvSpriteAnim extends Vue {
122
119
  this.blinkAnimCache = null;
123
120
  this.transform_style = this._AnalyzeProp();
124
121
  this.sAnimationToken = 0;
125
- }
126
-
127
- stop(end_frame) {
128
- if (this.$props.spriteInfo.frames && this.$props.spriteInfo.frames.length === 1) {
129
- return;
130
- }
131
- this.stopped = true;
132
- this.stopFrame = end_frame || this.stopFrame;
133
- }
122
+ },
134
123
 
135
- start(end_frame, duration) {
136
- if (this.$props.spriteInfo.frames && this.$props.spriteInfo.frames.length === 1) {
137
- return;
138
- }
139
- this.innerId += 1;
140
- this.stopped = false;
141
- this.spriteDuration = duration || this.$props.duration;
142
- this.stopFrame = end_frame || this.stopFrame;
143
- }
124
+ unmounted() {
125
+ this._clearExpiredKeyFrames();
126
+ },
144
127
 
145
- blink(alphas, duration, ease, delay, repeat) {
146
- // 注意:比较数组是否相同仅在此场景下使用toString,其他场景
147
- if (!this.blinkAnimCache
148
- || (this.blinkAnimCache.alphas.toString() !== alphas.toString()
149
- || this.blinkAnimCache.duration !== duration
150
- || this.blinkAnimCache.ease !== ease
151
- || this.blinkAnimCache.delay !== delay
152
- || this.blinkAnimCache.repeat !== repeat)) {
153
- const anim_name_base = this._getAnimNameBase();
154
- const anim_name_blink = `${anim_name_base}-blink`;
155
- let image_keyframs = `@keyframes ${anim_name_blink} {`;
156
- const frame_percent = 1 / (alphas.length);
157
- for (let i = 0; i < alphas.length; i++) {
158
- const alpha = alphas[i];
159
- let header;
160
- if (i !== alphas.length - 1) {
161
- header = `${parseFloat(frame_percent * i * 100).toFixed(2)}% {`;
162
- } else {
163
- header = '100% {';
128
+ methods: {
129
+ stop(end_frame) {
130
+ if (this.$props.spriteInfo.frames && this.$props.spriteInfo.frames.length === 1) {
131
+ return;
164
132
  }
165
- image_keyframs += header;
133
+ this.stopped = true;
134
+ this.stopFrame = end_frame || this.stopFrame;
135
+ },
166
136
 
167
- if (alpha) {
168
- const tr_str = ` opacity:${alpha};`;
169
- image_keyframs += tr_str;
137
+ start(end_frame, duration) {
138
+ if (this.$props.spriteInfo.frames && this.$props.spriteInfo.frames.length === 1) {
139
+ return;
140
+ }
141
+ this.innerId += 1;
142
+ this.stopped = false;
143
+ this.spriteDuration = duration || this.$props.duration;
144
+ this.stopFrame = end_frame || this.stopFrame;
145
+ },
146
+
147
+ blink(alphas, duration, ease, delay, repeat) {
148
+ // 注意:比较数组是否相同仅在此场景下使用toString,其他场景
149
+ if (!this.blinkAnimCache
150
+ || (this.blinkAnimCache.alphas.toString() !== alphas.toString()
151
+ || this.blinkAnimCache.duration !== duration
152
+ || this.blinkAnimCache.ease !== ease
153
+ || this.blinkAnimCache.delay !== delay
154
+ || this.blinkAnimCache.repeat !== repeat)) {
155
+ const anim_name_base = this._getAnimNameBase();
156
+ const anim_name_blink = `${anim_name_base}-blink`;
157
+ let image_keyframs = `@keyframes ${anim_name_blink} {`;
158
+ const frame_percent = 1 / (alphas.length);
159
+ for (let i = 0; i < alphas.length; i++) {
160
+ const alpha = alphas[i];
161
+ let header;
162
+ if (i !== alphas.length - 1) {
163
+ header = `${parseFloat(frame_percent * i * 100).toFixed(2)}% {`;
164
+ } else {
165
+ header = '100% {';
166
+ }
167
+ image_keyframs += header;
168
+
169
+ if (alpha) {
170
+ const tr_str = ` opacity:${alpha};`;
171
+ image_keyframs += tr_str;
172
+ }
173
+
174
+ image_keyframs += '}';
175
+ image_keyframs += "\n";
170
176
  }
171
-
172
177
  image_keyframs += '}';
173
- image_keyframs += "\n";
174
- }
175
- image_keyframs += '}';
176
- if (this.keyFrameStyleSheet) {
177
- this.keyFrameStyleSheet.insertRule(image_keyframs);
178
- }
179
- this.blinkAnimCache = {
180
- alphas,
181
- duration,
182
- ease,
183
- delay,
184
- repeat,
185
- blinkAnimName: anim_name_blink
186
- };
187
- }
188
-
189
- // 参数格式化
190
- ease = ease || "";
191
- delay = delay || 0;
192
- repeat = (repeat === -1) ? "infinite" : (repeat || 1);
193
-
194
- const animName = `${this.blinkAnimCache.blinkAnimName} ${duration}s ${ease} ${delay}s ${repeat}`;
195
- this.blinkAnim = animName;
196
- this.stopped = true;
197
- }
198
-
199
- _getAnimNameBase() {
200
- return this.$props.spriteName ? this.$props.spriteName : `sprite-anim-name-${this.sAnimationToken++}`;
201
- }
202
-
203
- _updateFrozeFrameCache(image_url, frame_info_list,
204
- canvas_width, canvas_height,
205
- source_width, source_height) {
206
- const cache = this.frozeFrameCache;
207
-
208
- const index = this.stopFrame === "start" ? 0 : frame_info_list.length - 1;
209
- const tr = _getTransformInfo(
210
- frame_info_list[index].source,
211
- frame_info_list[index].target,
212
- canvas_width,
213
- canvas_height
214
- );
215
-
216
- cache.clipStyle = {
217
- transform: _createTransformStyle(tr.csw, tr.csh, tr.cx, tr.cy),
218
- transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
219
- overflow: "hidden",
220
- left: 0,
221
- top: 0,
222
- width: canvas_width,
223
- height: canvas_height,
224
- };
225
-
226
- cache.transStyle = {
227
- transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
228
- transform: _createTransformStyle(tr.sw, tr.sh, tr.x, tr.y),
229
- width: source_width,
230
- height: source_height,
231
- };
232
-
233
- cache.imageStyle = {
234
- backgroundImage: image_url,
235
- width: source_width,
236
- height: source_height,
237
- };
238
- }
239
-
240
- _updateAnimateFrameCache(image_url, frame_info_list,
241
- canvas_width, canvas_height,
242
- source_width, source_height) {
243
- this._clearExpiredKeyFrames();
244
-
245
- if (!frame_info_list) { return; }
246
- const anim_name_base = this._getAnimNameBase();
247
- const frame_percent = 1 / (frame_info_list.length);
248
- const anim_name_clip = `${anim_name_base}-clip`;
249
- const anim_name_image = `${anim_name_base}-image`;
250
- let image_keyframs = `@keyframes ${anim_name_image} {`;
251
- let clip_keyframs = `@keyframes ${anim_name_clip} {`;
252
-
253
- for (let i = 0; i < frame_info_list.length + 1; i++) {
254
- let item;
255
- if (i !== frame_info_list.length) {
256
- item = frame_info_list[i];
257
- } else {
258
- // 追加一个最后一帧以保证最后一帧可见
259
- item = frame_info_list[frame_info_list.length - 1];
178
+ if (this.keyFrameStyleSheet) {
179
+ this.keyFrameStyleSheet.insertRule(image_keyframs);
260
180
  }
261
-
262
- // Header
263
- let header;
264
- if (i !== frame_info_list.length) {
265
- header = `${parseFloat(frame_percent * i * 100).toFixed(2)}% {`;
266
- } else {
267
- header = '100% {';
181
+ this.blinkAnimCache = {
182
+ alphas,
183
+ duration,
184
+ ease,
185
+ delay,
186
+ repeat,
187
+ blinkAnimName: anim_name_blink
188
+ };
268
189
  }
269
- image_keyframs += header;
270
- clip_keyframs += header;
271
190
 
272
- if (item.source) {
273
- const tr = _getTransformInfo(item.source, item.target, canvas_width, canvas_height);
274
- const clip_trans = _createTransformStyle(tr.csw, tr.csh, tr.cx, tr.cy);
275
- const image_trans = _createTransformStyle(tr.sw, tr.sh, tr.x, tr.y);
191
+ // 参数格式化
192
+ ease = ease || "";
193
+ delay = delay || 0;
194
+ repeat = (repeat === -1) ? "infinite" : (repeat || 1);
195
+
196
+ const animName = `${this.blinkAnimCache.blinkAnimName} ${duration}s ${ease} ${delay}s ${repeat}`;
197
+ this.blinkAnim = animName;
198
+ this.stopped = true;
199
+ },
200
+
201
+ _getAnimNameBase() {
202
+ return this.$props.spriteName ? this.$props.spriteName : `sprite-anim-name-${this.sAnimationToken++}`;
203
+ },
204
+
205
+ _updateFrozeFrameCache(image_url, frame_info_list,
206
+ canvas_width, canvas_height,
207
+ source_width, source_height) {
208
+ const cache = this.frozeFrameCache;
209
+
210
+ const index = this.stopFrame === "start" ? 0 : frame_info_list.length - 1;
211
+ const tr = _getTransformInfo(
212
+ frame_info_list[index].source,
213
+ frame_info_list[index].target,
214
+ canvas_width,
215
+ canvas_height
216
+ );
276
217
 
277
- let tr_str = "";
278
- tr_str = `${tr_str}transform:${clip_trans};transform-origin:left top;`;
279
- clip_keyframs += tr_str;
218
+ cache.clipStyle = {
219
+ transform: _createTransformStyle(tr.csw, tr.csh, tr.cx, tr.cy),
220
+ transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
221
+ overflow: "hidden",
222
+ left: 0,
223
+ top: 0,
224
+ width: canvas_width,
225
+ height: canvas_height,
226
+ };
280
227
 
281
- tr_str = "";
282
- tr_str = `${tr_str}transform:${image_trans};transform-origin:left top;`;
283
- image_keyframs += tr_str;
228
+ cache.transStyle = {
229
+ transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
230
+ transform: _createTransformStyle(tr.sw, tr.sh, tr.x, tr.y),
231
+ width: source_width,
232
+ height: source_height,
233
+ };
234
+
235
+ cache.imageStyle = {
236
+ backgroundImage: image_url,
237
+ width: source_width,
238
+ height: source_height,
239
+ };
240
+ },
241
+
242
+ _updateAnimateFrameCache(image_url, frame_info_list,
243
+ canvas_width, canvas_height,
244
+ source_width, source_height) {
245
+ this._clearExpiredKeyFrames();
246
+
247
+ if (!frame_info_list) { return; }
248
+ const anim_name_base = this._getAnimNameBase();
249
+ const frame_percent = 1 / (frame_info_list.length);
250
+ const anim_name_clip = `${anim_name_base}-clip`;
251
+ const anim_name_image = `${anim_name_base}-image`;
252
+ let image_keyframs = `@keyframes ${anim_name_image} {`;
253
+ let clip_keyframs = `@keyframes ${anim_name_clip} {`;
254
+
255
+ for (let i = 0; i < frame_info_list.length + 1; i++) {
256
+ let item;
257
+ if (i !== frame_info_list.length) {
258
+ item = frame_info_list[i];
259
+ } else {
260
+ // 追加一个最后一帧以保证最后一帧可见
261
+ item = frame_info_list[frame_info_list.length - 1];
262
+ }
263
+
264
+ // Header
265
+ let header;
266
+ if (i !== frame_info_list.length) {
267
+ header = `${parseFloat(frame_percent * i * 100).toFixed(2)}% {`;
268
+ } else {
269
+ header = '100% {';
270
+ }
271
+ image_keyframs += header;
272
+ clip_keyframs += header;
273
+
274
+ if (item.source) {
275
+ const tr = _getTransformInfo(item.source, item.target, canvas_width, canvas_height);
276
+ const clip_trans = _createTransformStyle(tr.csw, tr.csh, tr.cx, tr.cy);
277
+ const image_trans = _createTransformStyle(tr.sw, tr.sh, tr.x, tr.y);
278
+
279
+ let tr_str = "";
280
+ tr_str = `${tr_str}transform:${clip_trans};transform-origin:left top;`;
281
+ clip_keyframs += tr_str;
282
+
283
+ tr_str = "";
284
+ tr_str = `${tr_str}transform:${image_trans};transform-origin:left top;`;
285
+ image_keyframs += tr_str;
286
+ }
287
+
288
+ image_keyframs += '}';
289
+ clip_keyframs += '}';
284
290
  }
285
291
 
286
292
  image_keyframs += '}';
287
293
  clip_keyframs += '}';
288
- }
289
294
 
290
- image_keyframs += '}';
291
- clip_keyframs += '}';
295
+ if (this.keyFrameStyleSheet) {
296
+ this.keyFrameStyleSheet.insertRule(image_keyframs);
297
+ this.keyFrameStyleSheet.insertRule(clip_keyframs);
292
298
 
293
- if (this.keyFrameStyleSheet) {
294
- this.keyFrameStyleSheet.insertRule(image_keyframs);
295
- this.keyFrameStyleSheet.insertRule(clip_keyframs);
299
+ // 记录Keyframe设置,以便于界面关闭时进行清理
300
+ this.keyFrameNames.clip = anim_name_clip;
301
+ this.keyFrameNames.image = anim_name_image;
302
+ this.keyFrameNames.valid = true;
303
+ }
304
+ const cache = this.animateFrameCache;
305
+
306
+ cache.clipAnimName = `${anim_name_base}-clip`;
307
+ cache.imageAnimName = `${anim_name_base}-image`;
308
+
309
+ cache.clipStyle = {
310
+ overflow: "hidden",
311
+ width: canvas_width,
312
+ height: canvas_height,
313
+ transform: null, // 重置 transform,以免影响keyframe动画
314
+ transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
315
+ animation: null, // 外部设置,需要时间和loop信息
316
+ };
296
317
 
297
- // 记录Keyframe设置,以便于界面关闭时进行清理
298
- this.keyFrameNames.clip = anim_name_clip;
299
- this.keyFrameNames.image = anim_name_image;
300
- this.keyFrameNames.valid = true;
301
- }
302
- const cache = this.animateFrameCache;
303
-
304
- cache.clipAnimName = `${anim_name_base}-clip`;
305
- cache.imageAnimName = `${anim_name_base}-image`;
306
-
307
- cache.clipStyle = {
308
- overflow: "hidden",
309
- width: canvas_width,
310
- height: canvas_height,
311
- transform: null, // 重置 transform,以免影响keyframe动画
312
- transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
313
- animation: null, // 外部设置,需要时间和loop信息
314
- };
318
+ cache.transStyle = {
319
+ transform: null, // 重置 transform,以免影响keyframe动画
320
+ transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
321
+ animation: null, // 外部设置,需要时间和loop信息
322
+ width: source_width,
323
+ height: source_height,
324
+ };
315
325
 
316
- cache.transStyle = {
317
- transform: null, // 重置 transform,以免影响keyframe动画
318
- transformOrigin: this.TRANSFORM_ORIGIN_LEFT_TOP,
319
- animation: null, // 外部设置,需要时间和loop信息
320
- width: source_width,
321
- height: source_height,
322
- };
326
+ cache.imageStyle = {
327
+ backgroundImage: image_url,
328
+ width: source_width,
329
+ height: source_height,
330
+ };
331
+ },
323
332
 
324
- cache.imageStyle = {
325
- backgroundImage: image_url,
326
- width: source_width,
327
- height: source_height,
328
- };
329
- }
333
+ _clearExpiredKeyFrames() {
334
+ if (this.keyFrameNames.valid) {
335
+ this._removeKeyFrame([this.keyFrameNames.clip, this.keyFrameNames.image]);
336
+ this.keyFrameNames.valid = false;
337
+ }
338
+ },
330
339
 
331
- _clearExpiredKeyFrames() {
332
- if (this.keyFrameNames.valid) {
333
- this._removeKeyFrame([this.keyFrameNames.clip, this.keyFrameNames.image]);
334
- this.keyFrameNames.valid = false;
335
- }
336
- }
340
+ _removeKeyFrame(names_array) {
341
+ if (this.keyFrameStyleSheet) {
342
+ this.keyFrameStyleSheet.removeMultiRules(names_array);
343
+ }
344
+ },
345
+
346
+ _IsAutoStart() {
347
+ let autoStart = false;
348
+ if (typeof this.$props.autostart === "boolean") {
349
+ autoStart = this.$props.autostart;
350
+ } if (typeof this.$props.autostart === "string" && this.$props.autostart !== "none") {
351
+ autoStart = true;
352
+ }
353
+ return autoStart;
354
+ },
355
+
356
+ _AnalyzeProp() {
357
+ const used = this.$props.controller && this.$props.controller.Used;
358
+ if (this.$props.spriteInfo.frames.length === 1 || (!used && !this._IsAutoStart()) || this.stopped) {
359
+ // 单图模式
360
+ // 解析图片信息
361
+ this._updateFrozeFrameCache(
362
+ this.$props.imageUrl,
363
+ this.$props.spriteInfo.frames,
364
+ this.$props.viewSize.w,
365
+ this.$props.viewSize.h,
366
+ this.$props.spriteInfo.meta.size.w,
367
+ this.$props.spriteInfo.meta.size.h
368
+ );
369
+
370
+ return {
371
+ clipStyle: this.frozeFrameCache.clipStyle,
372
+ transStyle: this.frozeFrameCache.transStyle,
373
+ imageStyle: this.frozeFrameCache.imageStyle,
374
+ };
375
+ }
337
376
 
338
- _removeKeyFrame(names_array) {
339
- if (this.keyFrameStyleSheet) {
340
- this.keyFrameStyleSheet.removeMultiRules(names_array);
341
- }
342
- }
343
377
 
344
- _IsAutoStart() {
345
- let autoStart = false;
346
- if (typeof this.$props.autostart === "boolean") {
347
- autoStart = this.$props.autostart;
348
- } if (typeof this.$props.autostart === "string" && this.$props.autostart !== "none") {
349
- autoStart = true;
350
- }
351
- return autoStart;
352
- }
378
+ // 动画模式
379
+ if (this.animateFrameCache.imageStyle.backgroundImage !== this.$props.imageUrl) {
380
+ // 解析图片信息
381
+ this._updateAnimateFrameCache(
382
+ this.$props.imageUrl,
383
+ this.$props.spriteInfo.frames,
384
+ this.$props.viewSize.w,
385
+ this.$props.viewSize.h,
386
+ this.$props.spriteInfo.meta.size.w,
387
+ this.$props.spriteInfo.meta.size.h
388
+ );
389
+ }
353
390
 
354
- _AnalyzeProp() {
355
- const used = this.$props.controller && this.$props.controller.Used;
356
- if (this.$props.spriteInfo.frames.length === 1 || (!used && !this._IsAutoStart()) || this.stopped) {
357
- // 单图模式
358
- // 解析图片信息
359
- this._updateFrozeFrameCache(
360
- this.$props.imageUrl,
361
- this.$props.spriteInfo.frames,
362
- this.$props.viewSize.w,
363
- this.$props.viewSize.h,
364
- this.$props.spriteInfo.meta.size.w,
365
- this.$props.spriteInfo.meta.size.h
366
- );
391
+ // 使用duration和loop信息更新动画设定
392
+ this.animateFrameCache.clipStyle.animation =
393
+ `${this.animateFrameCache.clipAnimName} ${this.spriteDuration}s steps(1,end) ${this.$props.loop}`;
394
+ this.animateFrameCache.transStyle.animation =
395
+ `${this.animateFrameCache.imageAnimName} ${this.spriteDuration}s steps(1,end) ${this.$props.loop}`;
367
396
 
368
397
  return {
369
- clipStyle: this.frozeFrameCache.clipStyle,
370
- transStyle: this.frozeFrameCache.transStyle,
371
- imageStyle: this.frozeFrameCache.imageStyle,
398
+ clipStyle: this.animateFrameCache.clipStyle,
399
+ transStyle: this.animateFrameCache.transStyle,
400
+ imageStyle: this.animateFrameCache.imageStyle,
372
401
  };
373
- }
374
-
375
-
376
- // 动画模式
377
- if (this.animateFrameCache.imageStyle.backgroundImage !== this.$props.imageUrl) {
378
- // 解析图片信息
379
- this._updateAnimateFrameCache(
380
- this.$props.imageUrl,
381
- this.$props.spriteInfo.frames,
382
- this.$props.viewSize.w,
383
- this.$props.viewSize.h,
384
- this.$props.spriteInfo.meta.size.w,
385
- this.$props.spriteInfo.meta.size.h
386
- );
387
- }
388
-
389
- // 使用duration和loop信息更新动画设定
390
- this.animateFrameCache.clipStyle.animation =
391
- `${this.animateFrameCache.clipAnimName} ${this.spriteDuration}s steps(1,end) ${this.$props.loop}`;
392
- this.animateFrameCache.transStyle.animation =
393
- `${this.animateFrameCache.imageAnimName} ${this.spriteDuration}s steps(1,end) ${this.$props.loop}`;
394
-
395
- return {
396
- clipStyle: this.animateFrameCache.clipStyle,
397
- transStyle: this.animateFrameCache.transStyle,
398
- imageStyle: this.animateFrameCache.imageStyle,
399
- };
400
- }
402
+ },
403
+
404
+ // shouldComponentUpdate(next_props, next_state) {
405
+ // return (
406
+ // (this.$props.imageUrl !== next_props.imageUrl)
407
+ // || (this.$props.onAnimEnd !== next_props.onAnimEnd)
408
+ // || (this.$props.loop !== next_props.loop)
409
+ // || (this.spriteDuration !== next_state.duration)
410
+ // || (this.$props.autostart !== next_props.autostart)
411
+ // || this.innerId !== next_state.innerId
412
+ // || this.stopped !== next_state.stopped
413
+ // || this.blinkAnim !== next_state.blinkAnim
414
+ // );
415
+ // }
416
+
417
+ onAnimEndDelegate() {
418
+ // 在onAnimEnd之前进行Stop,以防onAnimEnd内部继续发生别的操作
419
+ this.stopped = true;
420
+ if (this.$props.onAnimEnd) {
421
+ this.$props.onAnimEnd();
422
+ }
423
+ },
401
424
 
402
- // shouldComponentUpdate(next_props, next_state) {
403
- // return (
404
- // (this.$props.imageUrl !== next_props.imageUrl)
405
- // || (this.$props.onAnimEnd !== next_props.onAnimEnd)
406
- // || (this.$props.loop !== next_props.loop)
407
- // || (this.spriteDuration !== next_state.duration)
408
- // || (this.$props.autostart !== next_props.autostart)
409
- // || this.innerId !== next_state.innerId
410
- // || this.stopped !== next_state.stopped
411
- // || this.blinkAnim !== next_state.blinkAnim
412
- // );
413
- // }
414
-
415
- onAnimEndDelegate() {
416
- // 在onAnimEnd之前进行Stop,以防onAnimEnd内部继续发生别的操作
417
- this.stopped = true;
418
- if (this.$props.onAnimEnd) {
419
- this.$props.onAnimEnd();
425
+ onBlinkAnimEnd() {
426
+ // 在onAnimEnd之前进行Stop,以防onAnimEnd内部继续发生别的操作
427
+ this.blinkAnim = null;
420
428
  }
421
429
  }
422
-
423
- onBlinkAnimEnd() {
424
- // 在onAnimEnd之前进行Stop,以防onAnimEnd内部继续发生别的操作
425
- this.blinkAnim = null;
426
- }
427
-
428
- unmounted() {
429
- this._clearExpiredKeyFrames();
430
- }
431
-
432
430
  }
433
- export default JsvSpriteAnim;
434
431
  </script>
435
432
 
436
433
  <template>
@@ -1,6 +1,5 @@
1
- import JsvSpriteAnim from './JsvSpriteAnim.vue';
2
- import SpriteController from './SpriteController.js';
1
+ import JsvSpriteAnim from "./JsvSpriteAnim.vue";
2
+ import { SpriteController } from "./SpriteController.js";
3
3
 
4
4
  export default JsvSpriteAnim;
5
5
  export { SpriteController };
6
-
@@ -21,6 +21,7 @@
21
21
  * onBlur {Function} 失去焦点的回调
22
22
  * swipeType {String} 切换方式,目前只支持 translate,之后可能会添加 opacity 等方式
23
23
  * smoothTranslate {boolean} 平滑模式动画开关
24
+ * reverseSwipe {boolean} 反转滚动方向,默认值为false. 默认滚动方向是正向, 既向index增大的方向, 反转后为反向, 既向index减小的方向
24
25
  * public methods:
25
26
  * slideTo
26
27
  * @description 滚动到指定id
@@ -123,6 +124,10 @@ export default {
123
124
  type: Boolean,
124
125
  default: false,
125
126
  },
127
+ reverseSwipe: {
128
+ type: Boolean,
129
+ default: false,
130
+ }
126
131
  },
127
132
  computed: {
128
133
  indicatorLayout() {
@@ -263,7 +268,7 @@ export default {
263
268
  clearInterval(this.timeoutHandler);
264
269
  }
265
270
  this.timeoutHandler = setInterval(() => {
266
- this._trigger(1);
271
+ this._trigger(this.reverseSwipe ? -1 : 1);
267
272
  }, this.autoplayInterval);
268
273
  }
269
274
  },