@@ -478,6 +478,8 @@ class OrbitControls extends EventDispatcher {
478
478
const pointers = [ ] ;
479
479
const pointerPositions = { } ;
480
480
481
+ let controlActive = false ;
482
+
481
483
function getAutoRotationAngle ( deltaTime ) {
482
484
483
485
if ( deltaTime !== null ) {
@@ -494,8 +496,8 @@ class OrbitControls extends EventDispatcher {
494
496
495
497
function getZoomScale ( delta ) {
496
498
497
- const normalized_delta = Math . abs ( delta ) / ( 100 * ( window . devicePixelRatio | 0 ) ) ;
498
- return Math . pow ( 0.95 , scope . zoomSpeed * normalized_delta ) ;
499
+ const normalizedDelta = Math . abs ( delta * 0.01 ) ;
500
+ return Math . pow ( 0.95 , scope . zoomSpeed * normalizedDelta ) ;
499
501
500
502
}
501
503
@@ -1192,12 +1194,70 @@ class OrbitControls extends EventDispatcher {
1192
1194
1193
1195
scope . dispatchEvent ( _startEvent ) ;
1194
1196
1195
- handleMouseWheel ( event ) ;
1197
+ handleMouseWheel ( customWheelEvent ( event ) ) ;
1196
1198
1197
1199
scope . dispatchEvent ( _endEvent ) ;
1198
1200
1199
1201
}
1200
1202
1203
+ function customWheelEvent ( event ) {
1204
+
1205
+ const mode = event . deltaMode ;
1206
+
1207
+ // minimal wheel event altered to meet delta-zoom demand
1208
+ const newEvent = {
1209
+ clientX : event . clientX ,
1210
+ clientY : event . clientY ,
1211
+ deltaY : event . deltaY ,
1212
+ }
1213
+
1214
+ switch ( mode ) {
1215
+
1216
+ case 1 : // LINE_MODE
1217
+ newEvent . deltaY *= 16 ;
1218
+ break ;
1219
+
1220
+ case 2 : // PAGE_MODE
1221
+ newEvent . deltaY *= 100 ;
1222
+ break ;
1223
+
1224
+ }
1225
+
1226
+ // detect if event was triggered by pinching
1227
+ if ( event . ctrlKey && ! controlActive ) {
1228
+
1229
+ newEvent . deltaY *= 10 ;
1230
+
1231
+ }
1232
+
1233
+ return newEvent ;
1234
+
1235
+ }
1236
+
1237
+ function interceptControlDown ( event ) {
1238
+
1239
+ if ( event . key === "Control" ) {
1240
+
1241
+ controlActive = true ;
1242
+
1243
+ document . addEventListener ( 'keyup' , interceptControlUp , { passive : true , capture : true } ) ;
1244
+
1245
+ }
1246
+
1247
+ }
1248
+
1249
+ function interceptControlUp ( event ) {
1250
+
1251
+ if ( event . key === "Control" ) {
1252
+
1253
+ controlActive = false ;
1254
+
1255
+ document . removeEventListener ( 'keyup' , interceptControlUp , { passive : true , capture : true } ) ;
1256
+
1257
+ }
1258
+
1259
+ }
1260
+
1201
1261
function onKeyDown ( event ) {
1202
1262
1203
1263
if ( scope . enabled === false || scope . enablePan === false ) return ;
@@ -1406,6 +1466,8 @@ class OrbitControls extends EventDispatcher {
1406
1466
scope . domElement . addEventListener ( 'pointercancel' , onPointerUp ) ;
1407
1467
scope . domElement . addEventListener ( 'wheel' , onMouseWheel , { passive : false } ) ;
1408
1468
1469
+ document . addEventListener ( 'keydown' , interceptControlDown , { passive : true , capture : true } ) ;
1470
+
1409
1471
// force an update at start
1410
1472
1411
1473
this . update ( ) ;
@@ -1414,4 +1476,4 @@ class OrbitControls extends EventDispatcher {
1414
1476
1415
1477
}
1416
1478
1417
- export { OrbitControls } ;
1479
+ export { OrbitControls } ;
0 commit comments