@@ -3,6 +3,13 @@ import EventHandler from "./event-handler.js"
33
44export default {
55 init ( el , prevList , config ) {
6+ const BASE_SPEED = 0.015 ;
7+ if ( config . zoomSpeed && typeof config . zoomSpeed !== 'number' ) {
8+ config . zoomSpeed = BASE_SPEED ;
9+ }
10+ if ( config . zoomSpeed <= 0 ) {
11+ config . zoomSpeed = BASE_SPEED ;
12+ }
613 const viewer = {
714 ...{
815 el,
@@ -31,7 +38,6 @@ export default {
3138 viewer . pt = { top : 0 , left : 0 }
3239 viewer . updateImage ( viewer . index )
3340
34- // // 消除 body 滚动条
3541 viewer . body . classList . add ( 'is-img-preview' )
3642 viewer . el . classList . add ( 'show' )
3743 }
@@ -101,15 +107,12 @@ export default {
101107 viewer . prevImg . style . marginTop = `${ top } px`
102108 }
103109
104- // 关闭按钮处理事件
105110 EventHandler . on ( viewer . closeButton , 'click' , ( ) => {
106111 viewer . body . classList . remove ( 'is-img-preview' )
107- // 恢复 Image
108112 viewer . resetImage ( )
109113 viewer . el . classList . remove ( 'show' )
110114 } )
111115
112- // 上一张按钮处理事件
113116 EventHandler . on ( el , 'click' , '.bb-viewer-prev' , ( ) => {
114117 viewer . index --
115118 if ( viewer . index < 0 ) {
@@ -118,7 +121,6 @@ export default {
118121 viewer . updateImage ( viewer . index )
119122 } )
120123
121- // 下一张按钮处理事件
122124 EventHandler . on ( el , 'click' , '.bb-viewer-next' , ( ) => {
123125 viewer . index ++
124126 if ( viewer . index >= viewer . prevList . length ) {
@@ -127,67 +129,61 @@ export default {
127129 viewer . updateImage ( viewer . index )
128130 } )
129131
130- // 全屏/恢复按钮功能
131132 EventHandler . on ( viewer . fullScreen , 'click' , ( ) => {
132133 viewer . resetImage ( )
133134 viewer . el . classList . toggle ( 'active' )
134135 } )
135136
136- // 放大功能
137137 EventHandler . on ( viewer . zoomOut , 'click' , ( ) => viewer . processImage ( scale => scale + 0.2 ) )
138-
139- // 缩小功能
140138 EventHandler . on ( viewer . zoomIn , 'click' , ( ) => viewer . processImage ( scale => Math . max ( 0.2 , scale - 0.2 ) ) )
141-
142- // 左旋转功能
143139 EventHandler . on ( viewer . rotateLeft , 'click' , ( ) => viewer . processImage ( null , rotate => rotate - 90 ) )
144-
145- // 右旋转功能
146140 EventHandler . on ( viewer . rotateRight , 'click' , ( ) => viewer . processImage ( null , rotate => rotate + 90 ) )
147141
148142 const handlerWheel = e => {
149- e . preventDefault ( )
150- const wheel = e . wheelDelta || - e . detail
151- const delta = Math . max ( - 1 , Math . min ( 1 , wheel ) )
143+ e . preventDefault ( ) ;
144+ const wheel = e . wheelDelta || - e . detail ;
145+ const delta = Math . max ( - 1 , Math . min ( 1 , wheel ) ) ;
146+
147+ const zoomStep = e . shiftKey ? viewer . zoomSpeed * 0.2 : viewer . zoomSpeed ;
148+
152149 if ( delta > 0 ) {
153- // 放大
154- viewer . processImage ( scale => scale + 0.015 )
155- } else {
156- // 缩小
157- viewer . processImage ( scale => Math . max ( 0.195 , scale - 0.015 ) )
150+ viewer . processImage ( scale => scale + zoomStep ) ;
151+ }
152+ else {
153+ viewer . processImage ( scale => Math . max ( 0.195 , scale - zoomStep ) ) ;
158154 }
159155 }
160- // 鼠标放大缩小
156+
161157 EventHandler . on ( viewer . prevImg , 'mousewheel' , handlerWheel )
162158 EventHandler . on ( viewer . prevImg , 'DOMMouseScroll' , handlerWheel )
163-
164- // 点击遮罩关闭功能
165159 EventHandler . on ( viewer . mask , 'click' , ( ) => {
166160 viewer . closeButton . click ( )
167161 } )
168162
169- // 增加键盘支持
170- EventHandler . on ( document , 'keydown' , e => {
163+ viewer . keyHandler = e => {
171164 if ( e . key === "ArrowUp" ) {
172165 viewer . zoomOut . click ( )
173- } else if ( e . key === "ArrowDown" ) {
166+ }
167+ else if ( e . key === "ArrowDown" ) {
174168 viewer . zoomIn . click ( )
175- } else if ( e . key === "ArrowLeft" ) {
169+ }
170+ else if ( e . key === "ArrowLeft" ) {
176171 const prevButton = viewer . el . querySelector ( '.bb-viewer-prev' )
177172 if ( prevButton ) {
178173 prevButton . click ( )
179174 }
180- } else if ( e . key === "ArrowRight" ) {
175+ }
176+ else if ( e . key === "ArrowRight" ) {
181177 const nextButton = viewer . el . querySelector ( '.bb-viewer-next' )
182178 if ( nextButton ) {
183179 nextButton . click ( )
184180 }
185- } else if ( e . key === "Escape" ) {
181+ }
182+ else if ( e . key === "Escape" ) {
186183 viewer . closeButton . click ( )
187184 }
188- } )
189-
190- // 缩放处理
185+ }
186+ EventHandler . on ( document , 'keydown' , viewer . keyHandler ) ;
191187 EventHandler . on ( viewer . prevImg , 'touchstart' , e => {
192188 e . preventDefault ( )
193189
@@ -278,8 +274,6 @@ export default {
278274 e => {
279275 viewer . originX = e . clientX || e . touches [ 0 ] . clientX
280276 viewer . originY = e . clientY || e . touches [ 0 ] . clientY
281-
282- // 偏移量
283277 viewer . pt . top = parseInt ( viewer . prevImg . style . marginTop )
284278 viewer . pt . left = parseInt ( viewer . prevImg . style . marginLeft )
285279
@@ -309,48 +303,23 @@ export default {
309303 } ,
310304
311305 dispose ( viewer ) {
312-
313- // 关闭按钮处理事件
314306 EventHandler . off ( viewer . closeButton , 'click' )
315-
316- // 上一张按钮处理事件
317307 EventHandler . off ( viewer . element , 'click' , '.bb-viewer-prev' )
318-
319- // 下一张按钮处理事件
320308 EventHandler . off ( viewer . element , 'click' , '.bb-viewer-next' )
321-
322- // 全屏/恢复按钮功能
323309 EventHandler . off ( viewer . fullScreen , 'click' )
324-
325- // 放大功能
326310 EventHandler . off ( viewer . zoomOut , 'click' )
327-
328- // 缩小功能
329311 EventHandler . off ( viewer . zoomIn , 'click' )
330-
331- // 左旋转功能
332312 EventHandler . off ( viewer . rotateLeft , 'click' )
333-
334- // 右旋转功能
335313 EventHandler . off ( viewer . rotateRight , 'click' )
336-
337- // 鼠标放大缩小
338314 EventHandler . off ( viewer . prevImg , 'mousewheel' )
339315 EventHandler . off ( viewer . prevImg , 'DOMMouseScroll' )
340-
341- // 触摸放大缩小
342316 EventHandler . off ( viewer . prevImg , 'touchstart' )
343317 EventHandler . off ( viewer . prevImg , 'touchmove' )
344318 EventHandler . off ( viewer . prevImg , 'touchend' )
345319 EventHandler . off ( viewer . prevImg , 'touchcancel' )
346-
347- //drag
348- Drag . dispose ( viewer . prevImg )
349-
350- // 点击遮罩关闭功能
351320 EventHandler . off ( viewer . mask , 'click' )
321+ EventHandler . off ( document , 'keydown' , viewer . keyHandler )
352322
353- // 增加键盘支持
354- EventHandler . off ( document , 'keydown' )
323+ Drag . dispose ( viewer . prevImg )
355324 }
356325}
0 commit comments