takaebato commented on code in PR #21588:
URL: https://github.com/apache/echarts/pull/21588#discussion_r3143330305


##########
src/component/helper/RoamController.ts:
##########
@@ -362,43 +392,43 @@ class RoamController extends 
Eventful<RoamEventDefinition> {
         const shouldZoom = isAvailableBehavior('zoomOnMouseWheel', e, 
this._opt);
         const shouldMove = isAvailableBehavior('moveOnMouseWheel', e, 
this._opt);
         const wheelDelta = e.wheelDelta;
-        const absWheelDeltaDelta = Math.abs(wheelDelta);
-        const originX = e.offsetX;
-        const originY = e.offsetY;
-
         // wheelDelta maybe -0 in chrome mac.
         if (wheelDelta === 0 || (!shouldZoom && !shouldMove)) {
             return;
         }
 
-        // If both `shouldZoom` and `shouldMove` is true, trigger
-        // their event both, and the final behavior is determined
-        // by event listener themselves.
+        // Reach through to the native WheelEvent for per-axis deltas;
+        // zrender's `wheelDelta` collapses the two axes into a single scalar.
+        // Pre-2013 IE has no `deltaY`; the axis helpers fall back to the
+        // passed default in that case.
+        const nativeEvent = (e.event as unknown as WheelEvent) || null;
+        const originX = e.offsetX;
+        const originY = e.offsetY;
 
         if (shouldZoom) {
-            // Convenience:
-            // Mac and VM Windows on Mac: scroll up: zoom out.
-            // Windows: scroll up: zoom in.
-
-            // FIXME: Should do more test in different environment.
-            // wheelDelta is too complicated in difference nvironment
-            // 
(https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel),
-            // although it has been normallized by zrender.
-            // wheelDelta of mouse wheel is bigger than touch pad.
-            const factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 
1 ? 1.2 : 1.1;
-            const scale = wheelDelta > 0 ? factor : 1 / factor;
+            // `scaleY` defaults to `scale` on the IE fallback so the single
+            // scalar still drives zoom; `scaleX` defaults to identity so
+            // `zoomOnMouseWheelAxis: 'horizontal'` becomes a safe no-op.
+            const scale = ladderZoomScale(wheelDelta);
             this._checkTriggerMoveZoom(this, 'zoom', 'zoomOnMouseWheel', e, {
-                scale: scale, originX: originX, originY: originY, 
isAvailableBehavior: null
+                scale: scale,
+                scaleX: axisZoomScale(nativeEvent, 'horizontal', 1),

Review Comment:
   @Justin-ZS 
   
   Fixed in 80bda33.
   
   The axis check is now hoisted into `RoamController._mousewheelHandler`, so 
non-matching wheel directions fall through to the browser.
   
   I also tightened `mergeControllerParams` to forward each dataZoom's actual 
`zoomOnMouseWheel` / `moveOnMouseWheel` truthiness instead of fixing both to 
`true`.
   As a side effect, this also resolves a long-standing case where wheel events 
were `stop()`ped even when every inside dataZoom had `zoomOnMouseWheel: false` 
and `moveOnMouseWheel: false` — i.e. the wheel was being captured even when no 
dataZoom would do anything with it.
   
   Note: modifier-mismatched wheel events (e.g. `zoomOnMouseWheel: 'shift'` 
with shift not held) exhibit the same shape of issue and are out of scope here.
   I'm planning a follow-up PR that extends the modifier API into a more 
flexible form (possibly an object form like `{ shift: true, ctrl: false }`) to 
address the requests in #18365 — that change should naturally resolve the 
modifier-mismatch fall-through too.
   
   Panel E in `test/dataZoom-inside-wheel-axis.html` is a quick visual check: a 
plain vertical wheel over the chart should now scroll the page.
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to