@10yun/cv-mobile-ui 0.5.62 → 0.5.63

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 (67) hide show
  1. package/package.json +1 -1
  2. package/plugins/uni-extend.js +10 -10
  3. package/ui-fireui/components/u-action-sheet/u-action-sheet.vue +46 -16
  4. package/ui-fireui/components/u-alert/u-alert.vue +11 -5
  5. package/ui-fireui/components/u-badge/u-badge.vue +52 -69
  6. package/ui-fireui/components/u-bottom-navigation/u-bottom-navigation.vue +28 -20
  7. package/ui-fireui/components/u-bottom-popup/u-bottom-popup.vue +40 -11
  8. package/ui-fireui/components/u-bubble-popup/u-bubble-popup.vue +3 -6
  9. package/ui-fireui/components/u-button/u-button.vue +262 -259
  10. package/ui-fireui/components/u-calendar/u-calendar.vue +227 -44
  11. package/ui-fireui/components/u-calendar/u-calendar2.js +562 -0
  12. package/ui-fireui/components/u-card/u-card.vue +50 -32
  13. package/ui-fireui/components/u-cascade-selection/u-cascade-selection.vue +197 -74
  14. package/ui-fireui/components/u-circular-progress/u-circular-progress.vue +324 -0
  15. package/ui-fireui/components/u-clipboard2/tui-clipboard.js +53 -0
  16. package/ui-fireui/components/u-collapse/u-collapse.vue +8 -8
  17. package/ui-fireui/components/u-config/index.js +129 -0
  18. package/ui-fireui/components/u-count-down/u-count-down.vue +124 -19
  19. package/ui-fireui/components/u-datetime/u-datetime.vue +416 -176
  20. package/ui-fireui/components/u-divider/u-divider.vue +3 -3
  21. package/ui-fireui/components/u-drawer/u-drawer.vue +55 -12
  22. package/ui-fireui/components/u-dropdown-list/u-dropdown-list.vue +103 -0
  23. package/ui-fireui/components/u-fab/u-fab.vue +344 -0
  24. package/ui-fireui/components/u-footer/u-footer.vue +148 -0
  25. package/ui-fireui/components/u-grid/u-grid.vue +2 -8
  26. package/ui-fireui/components/u-grid-item/u-grid-item.vue +22 -5
  27. package/ui-fireui/components/u-icon/u-icon-new.js +190 -0
  28. package/ui-fireui/components/u-icon/u-icon-new.vue +100 -0
  29. package/ui-fireui/components/u-image-cropper/u-image-cropper.vue +1144 -0
  30. package/ui-fireui/components/u-image-group/u-image-group.vue +164 -0
  31. package/ui-fireui/components/u-keyboard/u-keyboard.vue +3 -2
  32. package/ui-fireui/components/u-keyboard-input/u-keyboard-input.vue +1 -1
  33. package/ui-fireui/components/u-list-cell/u-list-cell.vue +82 -72
  34. package/ui-fireui/components/u-list-view/u-list-view.vue +33 -8
  35. package/ui-fireui/components/u-loading/u-loading.vue +107 -27
  36. package/ui-fireui/components/u-loadmore/u-loadmore.vue +21 -3
  37. package/ui-fireui/components/u-modal/u-modal.vue +140 -176
  38. package/ui-fireui/components/u-navigation-bar/u-navigation-bar.vue +121 -28
  39. package/ui-fireui/components/u-no-data/u-no-data.vue +58 -20
  40. package/ui-fireui/components/u-nomore/u-nomore.vue +5 -4
  41. package/ui-fireui/components/u-numberbox/u-numberbox.vue +88 -45
  42. package/ui-fireui/components/u-picture-cropper/u-picture-cropper.vue +94 -36
  43. package/ui-fireui/components/u-picture-cropper/u-picture-cropper.wxs +27 -17
  44. package/ui-fireui/components/u-rate/u-rate.vue +197 -0
  45. package/ui-fireui/components/u-round-progress/u-round-progress.vue +62 -42
  46. package/ui-fireui/components/u-scroll-top/u-scroll-top.vue +4 -3
  47. package/ui-fireui/components/u-section/u-section.vue +149 -0
  48. package/ui-fireui/components/u-skeleton/u-skeleton.vue +37 -6
  49. package/ui-fireui/components/u-steps/u-steps.vue +110 -27
  50. package/ui-fireui/components/u-sticky/u-sticky.vue +35 -21
  51. package/ui-fireui/components/u-sticky-wxs/u-sticky-wxs.vue +7 -4
  52. package/ui-fireui/components/u-sticky-wxs/u-sticky.wxs +39 -36
  53. package/ui-fireui/components/u-swipe-action/u-swipe-action.vue +76 -19
  54. package/ui-fireui/components/u-tabbar/u-tabbar.vue +71 -38
  55. package/ui-fireui/components/u-tabs/u-tabs.vue +133 -51
  56. package/ui-fireui/components/u-tag/u-tag.vue +109 -226
  57. package/ui-fireui/components/u-time-axis/u-time-axis.vue +1 -1
  58. package/ui-fireui/components/u-timeaxis-item/u-timeaxis-item.vue +1 -1
  59. package/ui-fireui/components/u-tips/u-tips.vue +35 -15
  60. package/ui-fireui/components/u-toast/u-toast.vue +9 -5
  61. package/ui-fireui/components/u-top-dropdown/u-top-dropdown.vue +8 -6
  62. package/ui-fireui/components/u-upload/u-upload-old.vue +462 -0
  63. package/ui-fireui/components/u-upload/u-upload.vue +648 -446
  64. package/ui-fireui/components/u-white-space/u-white-space.vue +68 -0
  65. package/ui-fireui/components/u-wing-blank/u-wing-blank.vue +100 -0
  66. package/uview-plus/libs/ctocode/index.js +1 -0
  67. package/uview-plus/libs/ctocode/richText.js +0 -1
@@ -8,12 +8,12 @@
8
8
  :data-lineWidth="lineWidth"
9
9
  :data-lineCap="lineCap"
10
10
  :data-fontSize="fontSize"
11
- :data-fontColor="fontColor"
11
+ :data-fontColor="getFontColor"
12
12
  :data-fontShow="fontShow"
13
13
  :data-percentText="percentText"
14
14
  :data-defaultShow="defaultShow"
15
15
  :data-defaultColor="defaultColor"
16
- :data-progressColor="progressColor"
16
+ :data-progressColor="getProgressColor"
17
17
  :data-gradualColor="gradualColor"
18
18
  :data-sAngle="sAngle"
19
19
  :data-counterclockwise="counterclockwise"
@@ -31,7 +31,7 @@
31
31
  <script module="parse" lang="renderjs">
32
32
  export default {
33
33
  methods: {
34
- formatStr(str) {
34
+ format(str) {
35
35
  if (!str) return str;
36
36
  return str.replace(/\"/g, '');
37
37
  },
@@ -42,13 +42,16 @@ export default {
42
42
  initDraw(percentage, oldPercentage, owner, ins) {
43
43
  let state = ins.getState();
44
44
  let res = ins.getDataset();
45
- const activeMode = this.formatStr(res.activemode);
45
+ const activeMode = this.format(res.activemode);
46
46
  let start = activeMode === 'backwards' ? 0 : state.startPercentage || 0;
47
+ //当start大于当前percentage时,start设置为0
48
+ start = start > percentage ? 0 : start;
47
49
  if (!state.progressContext || !state.canvas) {
48
50
  const width = res.width;
49
51
  const height = res.height == 0 ? res.width : res.height;
50
52
  let ele = `.${res.cid}>canvas`;
51
- const canvas = document.querySelectorAll(this.formatStr(ele))[0];
53
+ const canvas = document.querySelectorAll(this.format(ele))[0];
54
+ if (!canvas) return;
52
55
  const ctx = canvas.getContext('2d');
53
56
  // const dpr =uni.getSystemInfoSync().pixelRatio;
54
57
  // canvas.style.width=width+'px';
@@ -68,17 +71,17 @@ export default {
68
71
  //终止弧度
69
72
  let sangle = Number(res.sangle) * Math.PI;
70
73
  let eAngle = Math.PI * (res.height != 0 ? 1 : 2) + sangle;
71
- this.drawArc(ctx, eAngle, this.formatStr(res.defaultcolor), res);
74
+ this.drawArc(ctx, eAngle, this.format(res.defaultcolor), res);
72
75
  },
73
76
  drawPercentage(ctx, percentage, res) {
74
77
  ctx.save(); //save和restore可以保证样式属性只运用于该段canvas元素
75
78
  ctx.beginPath();
76
- ctx.fillStyle = this.formatStr(res.fontcolor);
79
+ ctx.fillStyle = this.format(res.fontcolor);
77
80
  ctx.font = res.fontsize + 'px Arial'; //设置字体大小和字体
78
81
  ctx.textAlign = 'center';
79
82
  ctx.textBaseline = 'middle';
80
83
  let radius = res.width / 2;
81
- let percenttext = this.formatStr(res.percenttext);
84
+ let percenttext = this.format(res.percenttext);
82
85
  if (!percenttext) {
83
86
  let multiple = Number(res.multiple);
84
87
  percentage = this.bool(res.counterclockwise) ? 100 - percentage * multiple : percentage * multiple;
@@ -95,8 +98,8 @@ export default {
95
98
  if (!ctx || !canvas) return;
96
99
  let that = this;
97
100
  let gradient = ctx.createLinearGradient(0, 0, Number(res.width), 0);
98
- gradient.addColorStop(0, this.formatStr(res.progresscolor));
99
- let gradualColor = this.formatStr(res.gradualcolor);
101
+ gradient.addColorStop(0, this.format(res.progresscolor));
102
+ let gradualColor = this.format(res.gradualcolor);
100
103
  if (gradualColor) {
101
104
  gradient.addColorStop('1', gradualColor);
102
105
  }
@@ -106,13 +109,16 @@ export default {
106
109
  if (res) {
107
110
  requestId = requestAnimationFrame(renderLoop);
108
111
  } else {
109
- cancelAnimationFrame(requestId);
110
- requestId = null;
111
- renderLoop = null;
112
+ setTimeout(() => {
113
+ cancelAnimationFrame(requestId);
114
+ requestId = null;
115
+ renderLoop = null;
116
+ }, 20);
112
117
  }
113
118
  });
114
119
  };
115
- requestId = requestAnimationFrame(renderLoop);
120
+ renderLoop();
121
+ // requestId = requestAnimationFrame(renderLoop)
116
122
 
117
123
  function drawFrame(callback) {
118
124
  ctx.clearRect(0, 0, canvas.width, canvas.height);
@@ -122,32 +128,33 @@ export default {
122
128
  if (that.bool(res.fontshow)) {
123
129
  that.drawPercentage(ctx, startPercentage, res);
124
130
  }
125
- if (percentage === 0 || (that.bool(res.counterclockwise) && startPercentage === 100)) return;
126
- let sangle = Number(res.sangle) * Math.PI;
127
- let eAngle = ((2 * Math.PI) / 100) * startPercentage + sangle;
128
- that.drawArc(ctx, eAngle, gradient, res);
131
+ let isEnd = percentage === 0 || (that.bool(res.counterclockwise) && startPercentage === 100);
132
+ if (!isEnd) {
133
+ let sangle = Number(res.sangle) * Math.PI;
134
+ let eAngle = ((2 * Math.PI) / 100) * startPercentage + sangle;
135
+ that.drawArc(ctx, eAngle, gradient, res);
136
+ }
129
137
  owner.callMethod('change', {
130
138
  percentage: startPercentage
131
139
  });
132
140
  if (startPercentage >= percentage) {
133
141
  state.startPercentage = startPercentage;
134
142
  owner.callMethod('end', {
135
- canvasId: that.formatStr(res.canvasid)
143
+ canvasId: that.format(res.canvasid)
136
144
  });
137
- cancelAnimationFrame(requestId);
138
145
  callback && callback(false);
139
- return;
146
+ } else {
147
+ let num = startPercentage + Number(res.speed);
148
+ startPercentage = num > percentage ? percentage : num;
149
+ callback && callback(true);
140
150
  }
141
- let num = startPercentage + Number(res.speed);
142
- startPercentage = num > percentage ? percentage : num;
143
- callback && callback(true);
144
151
  }
145
152
  },
146
153
  //创建弧线
147
154
  drawArc(ctx, eAngle, strokeStyle, res) {
148
155
  ctx.save();
149
156
  ctx.beginPath();
150
- ctx.lineCap = this.formatStr(res.linecap);
157
+ ctx.lineCap = this.format(res.linecap);
151
158
  ctx.lineWidth = Number(res.linewidth);
152
159
  ctx.strokeStyle = strokeStyle;
153
160
  let radius = res.width / 2; //x=y
@@ -162,13 +169,14 @@ export default {
162
169
  </script>
163
170
  <script>
164
171
  export default {
165
- name: 'fuiRoundProgress',
172
+ name: 'tuiRoundProgress',
173
+ emits: ['change', 'end'],
166
174
  props: {
167
175
  /*
168
- 传值需使用rpx进行转换保证各终端兼容
169
- px = rpx / 750 * wx.getSystemInfoSync().windowWidth
170
- 圆形进度条(画布)宽度,直径 [px]
171
- */
176
+ 传值需使用rpx进行转换保证各终端兼容
177
+ px = rpx / 750 * wx.getSystemInfoSync().windowWidth
178
+ 圆形进度条(画布)宽度,直径 [px]
179
+ */
172
180
  diam: {
173
181
  type: Number,
174
182
  default: 60
@@ -184,11 +192,11 @@ export default {
184
192
  default: 4
185
193
  },
186
194
  /*
187
- 线条的端点样式
188
- butt:向线条的每个末端添加平直的边缘
189
- round 向线条的每个末端添加圆形线帽
190
- square 向线条的每个末端添加正方形线帽
191
- */
195
+ 线条的端点样式
196
+ butt:向线条的每个末端添加平直的边缘
197
+ round 向线条的每个末端添加圆形线帽
198
+ square 向线条的每个末端添加正方形线帽
199
+ */
192
200
  lineCap: {
193
201
  type: String,
194
202
  default: 'round'
@@ -201,7 +209,7 @@ export default {
201
209
  //圆环进度字体颜色
202
210
  fontColor: {
203
211
  type: String,
204
- default: '#5677fc'
212
+ default: ''
205
213
  },
206
214
  //是否显示进度文字
207
215
  fontShow: {
@@ -209,9 +217,9 @@ export default {
209
217
  default: true
210
218
  },
211
219
  /*
212
- 自定义显示文字[默认为空,显示百分比,fontShow=true时生效]
213
- 可以使用 slot自定义显示内容
214
- */
220
+ 自定义显示文字[默认为空,显示百分比,fontShow=true时生效]
221
+ 可以使用 slot自定义显示内容
222
+ */
215
223
  percentText: {
216
224
  type: String,
217
225
  default: ''
@@ -229,7 +237,7 @@ export default {
229
237
  //进度条颜色
230
238
  progressColor: {
231
239
  type: String,
232
- default: '#5677fc'
240
+ default: ''
233
241
  },
234
242
  //进度条渐变颜色[结合progressColor使用,默认为空]
235
243
  gradualColor: {
@@ -267,25 +275,37 @@ export default {
267
275
  default: 'backwards'
268
276
  }
269
277
  },
278
+ computed: {
279
+ getFontColor() {
280
+ return this.fontColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
281
+ },
282
+ getProgressColor() {
283
+ return this.progressColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
284
+ }
285
+ },
270
286
  watch: {
271
287
  percentage(val) {
272
- this.percent = val;
288
+ if (this.isInit) {
289
+ this.percent = val;
290
+ }
273
291
  }
274
292
  },
275
293
  mounted() {
276
294
  setTimeout(() => {
277
295
  this.percent = this.percentage;
296
+ this.isInit = true;
278
297
  }, 50);
279
298
  },
280
299
  data() {
281
300
  return {
301
+ isInit: false,
282
302
  percent: -1,
283
303
  progressCanvasId: this.getCanvasId()
284
304
  };
285
305
  },
286
306
  methods: {
287
307
  getCanvasId() {
288
- return 'fui' + new Date().getTime() + (Math.random() * 100000).toFixed(0);
308
+ return 'tui' + new Date().getTime() + (Math.random() * 100000).toFixed(0);
289
309
  },
290
310
  change(e) {
291
311
  //绘制进度
@@ -36,7 +36,8 @@
36
36
  * 也可直接转成base64(不建议)
37
37
  * */
38
38
  export default {
39
- name: 'fuiScrollTop',
39
+ name: 'tuiScrollTop',
40
+ emits: ['index', 'share'],
40
41
  props: {
41
42
  //回顶部按钮距离底部距离 rpx
42
43
  bottom: {
@@ -107,7 +108,7 @@ export default {
107
108
  };
108
109
  },
109
110
  methods: {
110
- goTop() {
111
+ goTop: function () {
111
112
  this.toggle = false;
112
113
  uni.pageScrollTo({
113
114
  scrollTop: 0,
@@ -117,7 +118,7 @@ export default {
117
118
  this.toggle = true;
118
119
  }, 220);
119
120
  },
120
- goIndex() {
121
+ goIndex: function () {
121
122
  this.$emit('index', {});
122
123
  },
123
124
  share() {
@@ -0,0 +1,149 @@
1
+ <template>
2
+ <view class="up-section" :style="{ margin: margin, background: background, padding: padding }">
3
+ <view class="up-section__title" @tap="handleClick">
4
+ <view
5
+ class="up-section__decorate"
6
+ v-if="isLine"
7
+ :style="{
8
+ background: getLineColor,
9
+ width: lineWidth + 'rpx',
10
+ left: `-${lineRight}rpx`,
11
+ top: lineGap + 'rpx',
12
+ bottom: lineGap + 'rpx',
13
+ borderRadius: lineCap === 'circle' ? `${lineWidth}rpx` : 0
14
+ }"
15
+ ></view>
16
+ <slot name="left"></slot>
17
+ <text :style="{ fontSize: size + 'rpx', color: color, fontWeight: fontWeight }" v-if="title">{{ title }}</text>
18
+ <slot></slot>
19
+ </view>
20
+ <view class="up-section__sub" :style="{ paddingTop: descrTop + 'rpx' }" v-if="descr">
21
+ <text class="up-section__descr" :style="{ fontSize: descrSize + 'rpx', color: descrColor }">{{ descr }}</text>
22
+ </view>
23
+ <slot name="descr"></slot>
24
+ </view>
25
+ </template>
26
+
27
+ <script>
28
+ export default {
29
+ name: 'tuiSection',
30
+ emits: ['click'],
31
+ props: {
32
+ title: {
33
+ type: String,
34
+ default: ''
35
+ },
36
+ size: {
37
+ type: [Number, String],
38
+ default: 32
39
+ },
40
+ color: {
41
+ type: String,
42
+ default: '#333'
43
+ },
44
+ fontWeight: {
45
+ type: [Number, String],
46
+ default: 400
47
+ },
48
+ descr: {
49
+ type: String,
50
+ default: ''
51
+ },
52
+ descrSize: {
53
+ type: [Number, String],
54
+ default: 24
55
+ },
56
+ descrColor: {
57
+ type: String,
58
+ default: '#7a7a7a'
59
+ },
60
+ descrTop: {
61
+ type: [Number, String],
62
+ default: 16
63
+ },
64
+ isLine: {
65
+ type: Boolean,
66
+ default: false
67
+ },
68
+ lineWidth: {
69
+ type: [Number, String],
70
+ default: 8
71
+ },
72
+ lineColor: {
73
+ type: String,
74
+ default: ''
75
+ },
76
+ //square、circle
77
+ lineCap: {
78
+ type: String,
79
+ default: 'circle'
80
+ },
81
+ lineRight: {
82
+ type: [Number, String],
83
+ default: 16
84
+ },
85
+ lineGap: {
86
+ type: [Number, String],
87
+ default: 4
88
+ },
89
+ background: {
90
+ type: String,
91
+ default: 'transparent'
92
+ },
93
+ padding: {
94
+ type: String,
95
+ default: '20rpx 30rpx'
96
+ },
97
+ margin: {
98
+ type: String,
99
+ default: '0'
100
+ }
101
+ },
102
+ computed: {
103
+ getLineColor() {
104
+ return this.lineColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
105
+ }
106
+ },
107
+ methods: {
108
+ handleClick() {
109
+ this.$emit('click', {
110
+ title: this.title
111
+ });
112
+ }
113
+ }
114
+ };
115
+ </script>
116
+
117
+ <style scoped>
118
+ .up-section {
119
+ /* #ifndef APP-NVUE */
120
+ width: 100%;
121
+ box-sizing: border-box;
122
+ /* #endif */
123
+ }
124
+
125
+ .up-section__title {
126
+ position: relative;
127
+ /* #ifndef APP-NVUE */
128
+ display: flex;
129
+ word-break: break-all;
130
+ flex-shrink: 0;
131
+ /* #endif */
132
+ flex-direction: row;
133
+ align-items: center;
134
+ }
135
+
136
+ .up-section__decorate {
137
+ position: absolute;
138
+ }
139
+
140
+ .up-section__sub {
141
+ /* #ifndef APP-NVUE */
142
+ word-break: break-all;
143
+ /* #endif */
144
+ }
145
+
146
+ .up-section__descr {
147
+ font-weight: 400;
148
+ }
149
+ </style>
@@ -5,6 +5,7 @@
5
5
  >
6
6
  <view
7
7
  class="up-skeleton-cmomon"
8
+ :class="{ 'up-skeleton__active': active }"
8
9
  v-for="(item, index) in skeletonElements"
9
10
  :key="index"
10
11
  :style="{
@@ -22,7 +23,7 @@
22
23
 
23
24
  <script>
24
25
  export default {
25
- name: 'fuiSkeleton',
26
+ name: 'tuiSkeleton',
26
27
  props: {
27
28
  //选择器(外层容器)
28
29
  selector: {
@@ -64,12 +65,17 @@ export default {
64
65
  //是否需要loading
65
66
  isLoading: {
66
67
  type: Boolean,
67
- default: true
68
+ default: false
68
69
  },
69
70
  //loading类型[1-10]
70
71
  loadingType: {
71
72
  type: Number,
72
73
  default: 1
74
+ },
75
+ //是否展示动画效果
76
+ active: {
77
+ type: Boolean,
78
+ default: true
73
79
  }
74
80
  },
75
81
  created() {
@@ -97,14 +103,14 @@ export default {
97
103
  };
98
104
  },
99
105
  methods: {
100
- getLoadingType(type) {
106
+ getLoadingType: function (type) {
101
107
  let value = 1;
102
108
  if (type && type > 0 && type < 11) {
103
109
  value = type;
104
110
  }
105
111
  return 'up-loading-' + value;
106
112
  },
107
- getRadius(type, val) {
113
+ getRadius: function (type, val) {
108
114
  let radius = '0';
109
115
  if (type == 'circular') {
110
116
  radius = '50%';
@@ -125,10 +131,20 @@ export default {
125
131
  let skeletonType = this.skeletonType || [];
126
132
  let nodes = [];
127
133
  for (let item of skeletonType) {
128
- let className = `.${item}`;
134
+ let className = '';
135
+ // #ifndef MP-WEIXIN
136
+ className = `.${item}`;
129
137
  if (~'rect_circular_fillet'.indexOf(item)) {
130
138
  className = `.${this.selector}-${item}`;
131
139
  }
140
+ // #endif
141
+
142
+ // #ifdef MP-WEIXIN
143
+ className = `.${this.selector} >>> .${item}`;
144
+ if (~'rect_circular_fillet'.indexOf(item)) {
145
+ className = `.${this.selector} >>> .${this.selector}-${item}`;
146
+ }
147
+ // #endif
132
148
  await this.nodesRef(className).then((res) => {
133
149
  res.map((d) => {
134
150
  d.skeletonType = item;
@@ -161,7 +177,6 @@ export default {
161
177
  .up-skeleton-cmomon {
162
178
  position: absolute;
163
179
  z-index: 99999;
164
- overflow: hidden;
165
180
  }
166
181
 
167
182
  .up-skeleton-box {
@@ -245,4 +260,20 @@ export default {
245
260
  transform: rotate(360deg);
246
261
  }
247
262
  }
263
+
264
+ .up-skeleton__active {
265
+ background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
266
+ animation: up-active 1.4s ease infinite;
267
+ background-size: 400% 100%;
268
+ }
269
+
270
+ @keyframes up-active {
271
+ 0% {
272
+ background-position: 100% 50%;
273
+ }
274
+
275
+ 100% {
276
+ background-position: 0 50%;
277
+ }
278
+ }
248
279
  </style>