You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在winit事件中获取滚轮delta值?

Rust winit 获取鼠标滚轮Delta值实现缩放

我正在用Rust的winit库编写小型图形程序,目标是实现基于滚轮输入的缩放功能,但不清楚如何获取滚轮移动的delta值(幅度或至少方向)。我的事件循环代码框架如下:

event_loop.run(move |event, _, control_flow| {
    match event {
        Event::WindowEvent {
            ref event,
            window_id,
        } if window_id == window.id() => {
            if !state.input(event) {
                match event {
                    // 此处需要处理滚轮事件
                }
            }
        }
        _ => {}
    }
});

之前尝试用WindowEvent::MouseInput处理鼠标事件,但它仅适用于鼠标左右键这类实体按键操作,于是改用WindowEvent::MouseWheel事件——该事件会在滚轮移动时触发,但我不知道如何访问其中的delta值来判断滚动方向和幅度。


解决方案

你可以直接在WindowEvent::MouseWheel的匹配分支中访问delta变量,它的类型是MouseScrollDelta,包含两种变体:

  • LineDelta(x, y):以行为单位的滚动(通常垂直滚轮对应y轴,水平滚轮对应x轴)
  • PixelDelta(PhysicalPosition{x, y}):以像素为单位的滚动

处理代码示例:

match event {
    WindowEvent::MouseWheel { delta, .. } => {
        match delta {
            MouseScrollDelta::LineDelta(_x, y) => {
                // 垂直滚轮滚动:y为正表示向上滚,负表示向下滚
                if y > 0.0 {
                    // 执行放大逻辑
                    println!("放大");
                } else {
                    // 执行缩小逻辑
                    println!("缩小");
                }
            }
            MouseScrollDelta::PixelDelta(pos) => {
                // 像素级滚动:pos.y的正负对应滚动方向
                if pos.y > 0.0 {
                    println!("放大");
                } else {
                    println!("缩小");
                }
            }
        }
    }
    // 其他事件处理示例(如空格键)
    WindowEvent::KeyboardInput {
        input:
            KeyboardInput {
                state: ElementState::Pressed,
                virtual_keycode: Some(VirtualKeyCode::Space),
                ..
            },
        ..
    } => {
        // 空格键触发的逻辑
    }
    _ => {}
}

说明

  • 不同系统或设备可能触发不同的delta类型,建议两种情况都处理以保证兼容性
  • 实现缩放时,可根据y值的正负调整缩放比例,比如每次滚动增加/减少10%的缩放系数

内容的提问来源于stack exchange,提问作者Trantidon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 03:33:30