@@ -483,6 +483,8 @@ class OrbitControls extends EventDispatcher {
483
483
const pointers = [ ] ;
484
484
const pointerPositions = { } ;
485
485
486
+ let controlActive = false ;
487
+
486
488
function getAutoRotationAngle ( deltaTime ) {
487
489
488
490
if ( deltaTime !== null ) {
@@ -499,8 +501,8 @@ class OrbitControls extends EventDispatcher {
499
501
500
502
function getZoomScale ( delta ) {
501
503
502
- const normalized_delta = Math . abs ( delta ) / ( 100 * ( window . devicePixelRatio | 0 ) ) ;
503
- return Math . pow ( 0.95 , scope . zoomSpeed * normalized_delta ) ;
504
+ const normalizedDelta = Math . abs ( delta * 0.01 ) ;
505
+ return Math . pow ( 0.95 , scope . zoomSpeed * normalizedDelta ) ;
504
506
505
507
}
506
508
@@ -1211,12 +1213,70 @@ class OrbitControls extends EventDispatcher {
1211
1213
1212
1214
scope . dispatchEvent ( _startEvent ) ;
1213
1215
1214
- handleMouseWheel ( event ) ;
1216
+ handleMouseWheel ( customWheelEvent ( event ) ) ;
1215
1217
1216
1218
scope . dispatchEvent ( _endEvent ) ;
1217
1219
1218
1220
}
1219
1221
1222
+ function customWheelEvent ( event ) {
1223
+
1224
+ const mode = event . deltaMode ;
1225
+
1226
+ // minimal wheel event altered to meet delta-zoom demand
1227
+ const newEvent = {
1228
+ clientX : event . clientX ,
1229
+ clientY : event . clientY ,
1230
+ deltaY : event . deltaY ,
1231
+ }
1232
+
1233
+ switch ( mode ) {
1234
+
1235
+ case 1 : // LINE_MODE
1236
+ newEvent . deltaY *= 16 ;
1237
+ break ;
1238
+
1239
+ case 2 : // PAGE_MODE
1240
+ newEvent . deltaY *= 100 ;
1241
+ break ;
1242
+
1243
+ }
1244
+
1245
+ // detect if event was triggered by pinching
1246
+ if ( event . ctrlKey && ! controlActive ) {
1247
+
1248
+ newEvent . deltaY *= 10 ;
1249
+
1250
+ }
1251
+
1252
+ return newEvent ;
1253
+
1254
+ }
1255
+
1256
+ function interceptControlDown ( event ) {
1257
+
1258
+ if ( event . key === "Control" ) {
1259
+
1260
+ controlActive = true ;
1261
+
1262
+ document . addEventListener ( 'keyup' , interceptControlUp , { passive : true , capture : true } ) ;
1263
+
1264
+ }
1265
+
1266
+ }
1267
+
1268
+ function interceptControlUp ( event ) {
1269
+
1270
+ if ( event . key === "Control" ) {
1271
+
1272
+ controlActive = false ;
1273
+
1274
+ document . removeEventListener ( 'keyup' , interceptControlUp , { passive : true , capture : true } ) ;
1275
+
1276
+ }
1277
+
1278
+ }
1279
+
1220
1280
function onKeyDown ( event ) {
1221
1281
1222
1282
if ( scope . enabled === false || scope . enablePan === false ) return ;
@@ -1425,6 +1485,8 @@ class OrbitControls extends EventDispatcher {
1425
1485
scope . domElement . addEventListener ( 'pointercancel' , onPointerUp ) ;
1426
1486
scope . domElement . addEventListener ( 'wheel' , onMouseWheel , { passive : false } ) ;
1427
1487
1488
+ document . addEventListener ( 'keydown' , interceptControlDown , { passive : true , capture : true } ) ;
1489
+
1428
1490
// force an update at start
1429
1491
1430
1492
this . update ( ) ;
@@ -1433,4 +1495,4 @@ class OrbitControls extends EventDispatcher {
1433
1495
1434
1496
}
1435
1497
1436
- export { OrbitControls } ;
1498
+ export { OrbitControls } ;
0 commit comments