@@ -10,15 +10,16 @@ export default {
10
10
contextmenuPos : [ ]
11
11
} ) ,
12
12
computed : {
13
- ...mapState ( 'editor' , [ 'editingElement' ] )
13
+ ...mapState ( 'editor' , [ 'editingElement' , 'work' ] )
14
14
} ,
15
15
methods : {
16
16
...mapActions ( 'editor' , [
17
17
'setEditingElement' ,
18
18
'setElementPosition' ,
19
19
'setElementShape' ,
20
20
'recordElementRect' ,
21
- 'elementManager'
21
+ 'elementManager' ,
22
+ 'updateWork'
22
23
] ) ,
23
24
// TODO #!zh: 优化代码
24
25
// generate vertical line
@@ -141,6 +142,43 @@ export default {
141
142
this . setEditingElement ( )
142
143
}
143
144
} ,
145
+ /**
146
+ * 更新作品高度
147
+ * @param {Number } height
148
+ */
149
+ updateWorkHeight ( height ) {
150
+ this . updateWork ( { height } )
151
+ } ,
152
+ /**
153
+ * TODO 封装 adjust editor scale 组件
154
+ * scale: height/width
155
+ * @param {MouseEvent } e
156
+ */
157
+ mousedownForAdjustLine ( e ) {
158
+ let startY = e . clientY
159
+ let startHeight = this . work . height
160
+
161
+ const canvasOuterWrapper = document . querySelector ( '#canvas-outer-wrapper' )
162
+
163
+ let move = moveEvent => {
164
+ // !#zh 移动的时候,不需要向后代元素传递事件,只需要单纯的移动就OK
165
+ moveEvent . stopPropagation ( )
166
+ moveEvent . preventDefault ( )
167
+
168
+ let currY = moveEvent . clientY
169
+ let currentHeight = currY - startY + startHeight
170
+ this . updateWorkHeight ( currentHeight )
171
+ // 交互效果:滚动条同步滚动至底部
172
+ canvasOuterWrapper && ( canvasOuterWrapper . scrollTop = canvasOuterWrapper . scrollHeight )
173
+ }
174
+
175
+ let up = moveEvent => {
176
+ document . removeEventListener ( 'mousemove' , move , true )
177
+ document . removeEventListener ( 'mouseup' , up , true )
178
+ }
179
+ document . addEventListener ( 'mousemove' , move , true )
180
+ document . addEventListener ( 'mouseup' , up , true )
181
+ } ,
144
182
/**
145
183
* #!zh: renderCanvas 渲染中间画布
146
184
* elements
@@ -251,6 +289,26 @@ export default {
251
289
onHideMenu = { this . hideContextMenu }
252
290
/> : null
253
291
}
292
+ < div style = { {
293
+ position : 'absolute' ,
294
+ top : `${ this . work . height } px` ,
295
+ width : '100%'
296
+ } } >
297
+ < div class = "long-page-adjust" >
298
+ < div class = "adjust-line" > </ div >
299
+ < div class = "adjust-button" onMousedown = { this . mousedownForAdjustLine } > < div class = "indicator" > </ div > </ div >
300
+ < div class = "adjust-tip" >
301
+ < span > 320 x</ span >
302
+ < a-input-number
303
+ size = "small"
304
+ style = "margin: 0 4px; width:60px;"
305
+ value = { this . work . height }
306
+ onChange = { height => { this . updateWork ( { height } ) } }
307
+ />
308
+ < span > px</ span >
309
+ </ div >
310
+ </ div >
311
+ </ div >
254
312
</ div >
255
313
)
256
314
}
0 commit comments