@shijiu/jsview-vue-samples 2.0.1045-next-vue.0 → 2.0.1073

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.
@@ -5,6 +5,8 @@ let state = reactive({
5
5
  foreColor: "#FF0000",
6
6
  backColor: "#00FF00",
7
7
  width:65,
8
+ transX: 0,
9
+ transY: 0,
8
10
  });
9
11
  onMounted(() => {
10
12
  timerId = setInterval(() => {
@@ -12,10 +14,14 @@ onMounted(() => {
12
14
  state.foreColor = "#FF0000";
13
15
  state.backColor = "#00FF00";
14
16
  state.width = 65;
17
+ state.transX = 50;
18
+ state.transY = 0;
15
19
  } else {
16
20
  state.foreColor = "#00FF00";
17
21
  state.backColor = "#FF0000";
18
22
  state.width = 55;
23
+ state.transX = 0;
24
+ state.transY = 50;
19
25
  }
20
26
  }, 3000);
21
27
  });
@@ -30,27 +36,36 @@ onBeforeUnmount(() => {
30
36
  </script>
31
37
 
32
38
  <template>
33
- <div class="block">顶级元素的CSS class中包含变量 (不推荐)</div>
39
+ <div class="block-var">CSS class中包含变量</div>
40
+
41
+ <div class="block-kf-var">CSS keyframes中包含变量</div>
34
42
 
35
- <div
36
- :style="{
37
- left: 90,
38
- width: 65,
39
- height: 65,
40
- color: state.foreColor,
41
- backgroundColor: state.backColor,
42
- }"
43
- >
44
- 子级元素CSS class中包含变量
45
- </div>
46
43
  </template>
47
44
 
48
45
  <style scoped>
49
- .block {
50
- width: v-bind(state.width + 10);
46
+ .block-var {
47
+ width: v-bind('state.width + 10');
51
48
  height: 65;
52
- /* word-wrap: break-word; */
53
- color: v-bind(state.foreColor);
54
- background-color: v-bind(state.backColor);
49
+ color: v-bind('state.foreColor');
50
+ background-color: v-bind('state.backColor');
55
51
  }
52
+
53
+ .block-kf-var {
54
+ left: 100;
55
+ width: 65;
56
+ height: 65;
57
+ color: v-bind('state.foreColor');
58
+ background-color: v-bind('state.backColor');
59
+ animation: AnimTranslate 2s linear infinite;
60
+ }
61
+
62
+ @keyframes AnimTranslate {
63
+ from {
64
+ transform: translate3d(0, v-bind('state.transY'), 0);
65
+ }
66
+ to {
67
+ transform: translate3d(v-bind('state.transX'), 0, 0);
68
+ }
69
+ }
70
+
56
71
  </style>
@@ -0,0 +1,11 @@
1
+ let dataUrl=""
2
+
3
+
4
+ const setDataUrl=(url)=>{
5
+ dataUrl = url
6
+ }
7
+
8
+ const getDataUrl=()=>{
9
+ return dataUrl
10
+ }
11
+ export { getDataUrl, setDataUrl}
@@ -0,0 +1,44 @@
1
+ const getSearchQuery = (url = '', obj, paramPosition) => {
2
+ const [searchPart = '', hashPart = ''] = url.split('#');
3
+ // eslint-disable-next-line no-nested-ternary
4
+ const position = (paramPosition === undefined) ? ((searchPart || !hashPart) ? 0 : 1) : paramPosition;
5
+ const setPart = position === 0 ? searchPart : hashPart;
6
+ const [base = '', search = ''] = setPart.split('?');
7
+ const originParams = {};
8
+ const combine = (prefix, value) => (value ? `${prefix}${value}` : '');
9
+ const getSearch = (data = {}) => {
10
+ const result = [];
11
+ Object.keys(data).forEach((key) => {
12
+ const val = data[key];
13
+ if (val !== null && val !== undefined) {
14
+ result.push([key, encodeURIComponent(val)].join('='));
15
+ }
16
+ });
17
+ return combine('?', result.join('&'));
18
+ };
19
+ search
20
+ .split('&')
21
+ .filter((x) => x)
22
+ .forEach((keyvalue) => {
23
+ const [key = '', value = ''] = keyvalue.split('=');
24
+ originParams[key] = decodeURIComponent(value);
25
+ });
26
+ if (obj) {
27
+ // 赋值
28
+ Object.assign(originParams, obj);
29
+ switch (position) {
30
+ case 0:
31
+ // 参数在search部分,拼接方式为base+getSearch+hashPart
32
+ return `${base}${getSearch(originParams)}${combine('#', hashPart)}`;
33
+ case 1:
34
+ // 参数在hash部分,拼接方式为searchPart+ base+getSearch
35
+ return searchPart + combine('#', base + getSearch(originParams));
36
+ default:
37
+ break;
38
+ }
39
+ } else {
40
+ // 取值
41
+ return originParams;
42
+ }
43
+ }
44
+ export {getSearchQuery}
@@ -39,6 +39,7 @@ export default {
39
39
  </div>
40
40
  </template>
41
41
 
42
- <style scoped>
42
+ <style>
43
+ /* css文件要单独放到没有scoped设置的style标签中,规避css属性redefine的warning */
43
44
  @import "./FontStyle.css";
44
45
  </style>
@@ -18,12 +18,14 @@ export default {
18
18
  </template>
19
19
 
20
20
  <style scoped>
21
- @import "./FontStyle.css";
22
-
23
21
  .title-range {
24
22
  left: 0;
25
23
  top: 0;
26
24
  width: v-bind('style.width');
27
25
  height: 20;
28
26
  }
27
+ </style>
28
+ <style>
29
+ /* css文件要单独放到没有scoped设置的style标签中,规避css属性redefine的warning */
30
+ @import "./FontStyle.css";
29
31
  </style>
@@ -9,9 +9,10 @@
9
9
  import { shallowRef, onMounted } from "vue";
10
10
  import { JsvPreload, buildPreloadInfo, jJsvRuntimeBridge, JsvFocusBlock } from "jsview";
11
11
  import { useRouter } from "vue-router";
12
-
12
+ import { setDataUrl, getDataUrl } from "../CommonUtils/ResourceData.js"
13
+ import { getSearchQuery } from "../CommonUtils/getSearchQuery.js"
13
14
  let router = useRouter();
14
-
15
+ let DemoResourceBase=shallowRef("")
15
16
  let backgroundImageUrl = shallowRef(null);
16
17
 
17
18
  let preloadInfo = shallowRef([]);
@@ -21,9 +22,9 @@ let _onPreloadDone = () => {
21
22
  jJsvRuntimeBridge.notifyPageLoaded();
22
23
  };
23
24
 
24
- const _OnKeyDown = (ev)=>{
25
+ const _OnKeyDown = (ev) => {
25
26
  // 结果默认传下来的返回键
26
- if(ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
27
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
27
28
  router?.go(-1); // 有router时,是从DemoHomepage进入,回退
28
29
  return true;
29
30
  }
@@ -31,11 +32,19 @@ const _OnKeyDown = (ev)=>{
31
32
  return false;
32
33
  };
33
34
 
35
+ //解析url
36
+ let query = getSearchQuery(window.location.href, undefined, 0)
37
+ if (query.DemoResourceBase) {
38
+ setDataUrl(query.DemoResourceBase)
39
+ //无网络环境下使用
40
+ DemoResourceBase.value = getDataUrl()
41
+ }
34
42
  onMounted(() => {
35
43
  console.log("simulate async get background url");
36
44
  setTimeout(() => {
37
45
  console.log("simulate background url got");
38
- backgroundImageUrl.value =
46
+ backgroundImageUrl.value = DemoResourceBase.value ? `${DemoResourceBase.value}/BackgroundLongmao.jpg`
47
+ :
39
48
  "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewVideo/ImageTestSample/BackgroundLongmao.jpg";
40
49
  preloadInfo.value = [buildPreloadInfo(backgroundImageUrl.value)];
41
50
  }, 0);
@@ -51,21 +60,15 @@ export default {
51
60
 
52
61
  <template>
53
62
  <div>
54
- <jsv-preload
55
- :key="backgroundImageUrl"
56
- :preloadList="preloadInfo"
57
- :onPreloadDone="_onPreloadDone"
58
- />
63
+ <jsv-preload :key="backgroundImageUrl" :preloadList="preloadInfo" :onPreloadDone="_onPreloadDone" />
59
64
  <div :style="{
60
- width: 1280,
61
- height: 720,
62
- backgroundImage: backgroundImageUrl,
63
- }"/>
64
- <jsv-focus-block
65
- :onAction = "{
66
- onKeyDown: _OnKeyDown
67
- }"
68
- >
65
+ width: 1280,
66
+ height: 720,
67
+ backgroundImage: backgroundImageUrl,
68
+ }" />
69
+ <jsv-focus-block :onAction="{
70
+ onKeyDown: _OnKeyDown
71
+ }">
69
72
  <router-view v-slot="{ Component, route }">
70
73
  <keep-alive>
71
74
  <component v-if="route.meta.keepAlive" :is="Component" />
@@ -187,10 +187,19 @@ let routeList = [
187
187
  path: '/Operations/FocusMoveStyle',
188
188
  component: () => import('jsview-vue-samples/FocusMoveStyle/App.vue'),
189
189
  },
190
+ {
191
+ name: 'Mockjs',
192
+ path: '/feature/MockjsDemo',
193
+ component: () => import('jsview-vue-samples/MockjsDemo/App.vue'),
194
+ },
190
195
  {
191
196
  name:'红包雨',
192
197
  path:'/Game/GiftRain',
193
198
  component:()=>import('jsview-vue-samples/GiftRain/App.vue'),
199
+ },{
200
+ name:'雷达图',
201
+ path:'/Game/RadarChart',
202
+ component:()=>import('jsview-vue-samples/JsvRadarChart/App.vue')
194
203
  }
195
204
  ];
196
205
 
@@ -1,5 +1,10 @@
1
1
  <script setup>
2
- const item_url =
2
+ import { getDataUrl } from "../CommonUtils/ResourceData";
3
+ //无网络环境下使用
4
+ const DemoResourceBase = getDataUrl()
5
+ const item_url = DemoResourceBase ?
6
+ `${DemoResourceBase}/27bda620942566673ab449a3ef765321.png`
7
+ :
3
8
  "http://oss.image.51vtv.cn/homepage/20210209/27bda620942566673ab449a3ef765321.png";
4
9
  </script>
5
10
 
package/GiftRain/App.vue CHANGED
@@ -3,8 +3,7 @@
3
3
  <div
4
4
  :style="{ width: 1920, height: 1080, overflow: 'hidden', transform: 'scale3d(0.67,0.67,1)', left: -220 * 1.5 + 8, top: -170 - 8 }">
5
5
  <JsvPreload :preloadList="preload_info"></JsvPreload>
6
- <div
7
- :style="{ backgroundImage: bg, width: 1920, height: 1080, overflow: 'hidden' }">
6
+ <div :style="{ backgroundImage: resourceMap.bg, width: 1920, height: 1080, overflow: 'hidden' }">
8
7
  <Score :score="score"></Score>
9
8
  <JsvActorMove key="JsvSpriteTranslate" :style="{
10
9
  top: 476 * 1.5,
@@ -51,7 +50,7 @@
51
50
 
52
51
  </div>
53
52
  <!-- 音频 -->
54
- <JsvSystemAudio key="AudioBg" :src="_AudioBgUrl" :loop="true" :onRef="onRef1" :onLoad="audioOnLoad" />
53
+ <JsvSystemAudio key="AudioBg" :src="resourceMap._AudioBgUrl" :loop="true" :onRef="onRef1" :onLoad="audioOnLoad" />
55
54
 
56
55
  <JsvSystemAudio v-if="!_DisableEffectSound" :onRef="onRef2" :loop="true" />
57
56
 
@@ -61,43 +60,69 @@
61
60
  </template>
62
61
  <script setup>
63
62
  /* eslint-disable */
64
- import { JsvFocusBlock, JsvActorMove, JsvActorMoveControl, jJsvRuntimeBridge, JsvPreload, buildPreloadInfo,JsvSystemAudio} from "jsview";
65
- import { shallowRef, onMounted, onBeforeUnmount } from "vue";
63
+ import { JsvFocusBlock, JsvActorMove, JsvActorMoveControl, jJsvRuntimeBridge, JsvPreload, buildPreloadInfo, JsvSystemAudio } from "jsview";
64
+ import { shallowRef, onMounted, onBeforeUnmount, provide } from "vue";
66
65
  import { useRouter } from "vue-router";
67
66
  import Score from "./components/Score.vue";
68
67
  import RedPacket from "./components/RedPacket.vue";
69
68
  import Sound from "./common/Sound.js"
69
+ import { getDataUrl } from "../CommonUtils/ResourceData"
70
70
  //音频Sound
71
71
  const MySound = new Sound()
72
+ //接收是否有DemoResourceBase,没有则正常走公共网络地址。
73
+ const DemoResourceBase = getDataUrl()
72
74
  //预加载信息
73
- const kimi_normal = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png';
74
- const kimi_smile = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_smile.png';
75
- const kimi_boom = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_boom.png';
76
- const red_packet = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/red.png';
77
- const bigRed_packet = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bigred.png'
78
- const boom_image = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/boom.png'
79
- const bg = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bg.jpg'
75
+ const resourceMap = {
76
+ kimi_normal: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png',
77
+ kimi_smile: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_smile.png',
78
+ kimi_boom: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_boom.png',
79
+ red_packet: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/red.png',
80
+ bigRed_packet: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bigred.png',
81
+ boom_image: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/boom.png',
82
+ bg: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bg.jpg',
83
+ _ScoreBg: "http://oss.image.qcast.cn/demo_images/red_packet_rain/score_bg.png",
84
+ add1: 'http://oss.image.qcast.cn/demo_images/red_packet_rain/add1.png',
85
+ add5: "http://oss.image.qcast.cn/demo_images/red_packet_rain/add5.png",
86
+ min1: "http://oss.image.qcast.cn/demo_images/red_packet_rain/min1.png",
87
+ _AudioBgUrl: "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewAudio/MiniGameBackgroundMusic-redpack.mp3"
88
+ }
89
+ if (DemoResourceBase) {
90
+ console.log('存在');
91
+ console.log(DemoResourceBase);
92
+ //正则进行替换
93
+ for (let i in resourceMap) {
94
+ //此正则规则是替换掉最后一个 / 前面的字符
95
+ resourceMap[i] = resourceMap[i].replace(/.*\/(.*)/, `${DemoResourceBase}/$1`);
96
+ }
97
+ //修改后暴露给子组件
98
+ provide("resourceMap", resourceMap)
99
+ } else {
100
+ //暴露给子组件
101
+ provide("resourceMap", resourceMap)
102
+ }
80
103
  const preload_info = [
81
- buildPreloadInfo(kimi_normal),
82
- buildPreloadInfo(kimi_smile),
83
- buildPreloadInfo(kimi_boom),
84
- buildPreloadInfo(red_packet),
85
- buildPreloadInfo(bigRed_packet),
86
- buildPreloadInfo(boom_image),
87
- buildPreloadInfo(bg)
104
+ buildPreloadInfo(resourceMap.kimi_normal),
105
+ buildPreloadInfo(resourceMap.kimi_smile),
106
+ buildPreloadInfo(resourceMap.kimi_boom),
107
+ buildPreloadInfo(resourceMap.red_packet),
108
+ buildPreloadInfo(resourceMap.bigRed_packet),
109
+ buildPreloadInfo(resourceMap.boom_image),
110
+ buildPreloadInfo(resourceMap.bg),
111
+ buildPreloadInfo(resourceMap.add1),
112
+ buildPreloadInfo(resourceMap.add5),
113
+ buildPreloadInfo(resourceMap.min1)
88
114
  ];
89
115
  //定义不需要响应式的变量
90
116
  let _CurrentRain = null;
91
117
  //音频ref
92
118
  let _Audio = null;
93
- let _AudioBgUrl = "https://qcast-image.oss-cn-qingdao.aliyuncs.com/JsViewAudio/MiniGameBackgroundMusic-redpack.mp3";
94
119
  //背景音频ref
95
120
  let _BgAudio = null;
96
121
  let _IsRunning = false;
97
122
  let _DisableEffectSound = true;
98
123
  let _TranslateControl = new JsvActorMoveControl()
99
124
  //定义需要响应式的变量
100
- let kimi = shallowRef("http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png")
125
+ let kimi = shallowRef(resourceMap.kimi_normal)
101
126
  let score = shallowRef(0)
102
127
  let min_score_image = shallowRef(null)
103
128
  let add_score_image = shallowRef(null)
@@ -126,22 +151,22 @@ const _onImpactTracer = (rain) => {
126
151
  switch (rain.type) {
127
152
  case 0:
128
153
  scoreAddAnim.value = "scoreUp 0.2s";
129
- kimi.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_normal.png";
130
- add_score_image.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/add1.png";
154
+ kimi.value = resourceMap.kimi_normal;
155
+ add_score_image.value = resourceMap.add1;
131
156
  score.value += 1;
132
157
  MySound.playGetSound()
133
158
  break;
134
159
  case 1:
135
160
  scoreAddAnim.value = "scoreUp 0.2s";
136
- kimi.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_smile.png";
137
- add_score_image.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/add5.png";
161
+ kimi.value = resourceMap.kimi_smile;
162
+ add_score_image.value = resourceMap.add5;
138
163
  MySound.playGetSound()
139
164
  score.value += 5;
140
165
  break;
141
166
  case 2:
142
167
  scoreMinAnim.value = "scoreUp 0.2s";
143
- min_score_image.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/min1.png";
144
- kimi.value = "http://oss.image.qcast.cn/demo_images/red_packet_rain/kimi_boom.png";
168
+ min_score_image.value = resourceMap.min1;
169
+ kimi.value = resourceMap.kimi_boom;
145
170
  score.value -= 1;
146
171
  MySound.playBoomSound()
147
172
  if (score.value < 0) {
@@ -1,38 +1,40 @@
1
1
  <template>
2
2
  <div>
3
3
  <div key="timer" :style="{
4
- width: 140*1.5,
5
- height: 140*1.5,
4
+ width: 140 * 1.5,
5
+ height: 140 * 1.5,
6
6
  backgroundImage: _ScoreBg,
7
- top: 40*1.5,
8
- left: 40*1.5,
7
+ top: 40 * 1.5,
8
+ left: 40 * 1.5,
9
9
  textAlign: 'center',
10
- lineHeight: 140*1.5,
10
+ lineHeight: 140 * 1.5,
11
11
  color: 'rgba(255,0,0,1.0)',
12
- fontSize: 72*1.5
12
+ fontSize: 72 * 1.5
13
13
  }">{{ timer }}</div>
14
14
  <SpriteTranslate v-for="(item, index) in itemList" :MoneyBag="props.MoneyBag" :onImpactTracer="onImpactTracer"
15
15
  :onDestory="_RemoveItem" :key="`spritetranslate${item.key}`" :item=item />
16
- </div>
16
+ </div>
17
17
  </template>
18
18
 
19
19
  <script setup>
20
- import { shallowRef, defineProps, onMounted, onBeforeUnmount } from 'vue';
20
+ import { shallowRef, defineProps, onMounted, onBeforeUnmount, inject } from 'vue';
21
21
  import SpriteTranslate from './SpriteTranslate.vue';
22
22
  //定义props
23
23
  const props = defineProps({
24
24
  onImpactTracer: Function,
25
25
  MoneyBag: Object,
26
- _ScoreMinAnimationEnd:Function,
27
- _ScoreAddAnimationEnd:Function
26
+ _ScoreMinAnimationEnd: Function,
27
+ _ScoreAddAnimationEnd: Function
28
28
  })
29
+ //接收
30
+ const resourceMap = inject("resourceMap")
29
31
  let _Index = 0;
30
32
  // 随机生成列表
31
- const _RedImage = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/red.png';
32
- const _BigRedImage = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/bigred.png';
33
- const _BoomImage = 'http://oss.image.qcast.cn/demo_images/red_packet_rain/boom.png';
34
- const _ScoreBg = "http://oss.image.qcast.cn/demo_images/red_packet_rain/score_bg.png";
35
- let itemList =shallowRef([])
33
+ const _RedImage = resourceMap.red_packet;
34
+ const _BigRedImage = resourceMap.bigRed_packet;
35
+ const _BoomImage = resourceMap.boom_image;
36
+ const _ScoreBg = resourceMap._ScoreBg;
37
+ let itemList = shallowRef([])
36
38
  let timer = shallowRef(60)
37
39
  const onImpactTracer = props.onImpactTracer;
38
40
  let _TimerOutId = null;
@@ -0,0 +1,99 @@
1
+ <!--
2
+ * @Author: ZhengYi
3
+ * @Date: 2023-04-26
4
+ * @LastEditors: ZhengYi
5
+ * @LastEditTime: 2023-04-26
6
+ * @Description: file content
7
+ -->
8
+ <template>
9
+ <jsv-focus-block autoFocus :onAction="actionDefines">
10
+ <div :style="{
11
+ textAlign: 'center',
12
+ fontSize: 30,
13
+ lineHeight: 50,
14
+ color: '#ffffff',
15
+ left: 100,
16
+ top: 20,
17
+ width: 1280 - 200,
18
+ height: 50,
19
+ backgroundColor: 'rgba(27,38,151,0.8)',
20
+ }">按左键各个方向随机减少,按右键各个方向随机增加</div>
21
+ <JsvRadarChart :data="data" :backgroundUrl="bgImageUrl" :foregroundUrl="resultSquare" :style="style"
22
+ :fontSize="fontSize" :extendOffset="70" :fontColor="'#ff3212'" :radius="200" />
23
+ <JsvRadarChart :data="data2" :backgroundUrl="bgImageUrl" :foregroundUrl="resultSquare" :style="style2"
24
+ :fontSize="fontSize" :extendOffset="50" :fontColor="'#FFF231'" :radius="200" />
25
+ </jsv-focus-block>
26
+ </template>
27
+
28
+ <script setup>
29
+ import { JsvRadarChart } from "jsview";
30
+ import resultSquare from "./assets/resultSquare.png"
31
+ import bgImageUrl from "./assets/Square.png"
32
+ import { onMounted, ref } from 'vue';
33
+ import { jJsvRuntimeBridge } from 'jsview';
34
+ import { useRouter } from "vue-router";
35
+ const router = useRouter();
36
+ const data = ref([
37
+ { title: '语文', value: 70 },
38
+ { title: '数学', value: 98 },
39
+ { title: '英语', value: 40 },
40
+ { title: '化学', value: 80 },
41
+ { title: '生物', value: 92 },
42
+ { title: '物理', value: 88 },
43
+ ])
44
+ const data2 = ref([
45
+ { title: '语文', value: 30 },
46
+ { title: '数学', value: 40 },
47
+ { title: '英语', value: 50 },
48
+ { title: '化学', value: 40 },
49
+ { title: '生物', value: 44 },
50
+ ])
51
+
52
+ const style = {
53
+ top: 400,
54
+ left: 300
55
+ }
56
+ const style2 = {
57
+ top: 400,
58
+ left: 950
59
+ }
60
+ const fontSize = 30;
61
+
62
+ const onKeyDown = (ev) => {
63
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
64
+ router.go(-1)
65
+ } else if (ev.keyCode == 39) {
66
+ data.value.forEach((item, index) => {
67
+ item.value += Math.random() * 10
68
+ if (item.value >= 100) {
69
+ item.value = 100
70
+ }
71
+ })
72
+ data2.value.forEach((item, index) => {
73
+ item.value += Math.random() * 10
74
+ if (item.value >= 100) {
75
+ item.value = 100
76
+ }
77
+ })
78
+ } else if (ev.keyCode == 37) {
79
+ data.value.forEach((item, index) => {
80
+ item.value -= Math.random() * 10
81
+ if (item.value <= 10) {
82
+ item.value == 8
83
+ }
84
+ })
85
+ data2.value.forEach((item, index) => {
86
+ item.value -= Math.random() * 10
87
+ if (item.value <= 10) {
88
+ item.value == 8
89
+ }
90
+ })
91
+ }
92
+ }
93
+ const actionDefines = {
94
+ onKeyDown
95
+ }
96
+
97
+ </script>
98
+
99
+ <style scoped></style>
Binary file
@@ -0,0 +1,51 @@
1
+ <!--
2
+ * @Author: ChenChanghua
3
+ * @Date: 2023-03-08 14:52:08
4
+ * @Description: file content
5
+ -->
6
+ <script setup>
7
+ import { useFocusHub } from "jsview";
8
+ import Center from "./center/Center.vue";
9
+ import Backward from "./backward/Backward.vue";
10
+
11
+ import { onMounted } from "vue";
12
+
13
+ const focusHub = useFocusHub();
14
+
15
+ onMounted(() => {
16
+ focusHub.setFocus("itemResizeCenter");
17
+ });
18
+ </script>
19
+
20
+ <template>
21
+ <div
22
+ :style="{
23
+ width: 1280,
24
+ height: 720,
25
+ backgroundColor: '#007788',
26
+ }"
27
+ >
28
+ <div :style="{ left: 150, top: 10 }" class="text">
29
+ 获焦一秒后放大, 放大动画以中心为锚点
30
+ </div>
31
+ <div :style="{ left: 150, top: 50 }">
32
+ <center />
33
+ </div>
34
+ <div :style="{ left: 150, top: 260 }" class="text">
35
+ 获焦一秒后放大, 放大动画以左侧为锚点
36
+ </div>
37
+ <div :style="{ left: 150, top: 300 }">
38
+ <backward />
39
+ </div>
40
+ </div>
41
+ </template>
42
+
43
+ <style scoped>
44
+ .text {
45
+ width: 600;
46
+ height: 30;
47
+ line-height: 30;
48
+ font-size: 25;
49
+ color: #ffffff;
50
+ }
51
+ </style>