Answers:
Smart Scroll采用“Grab Scroll”功能,可以满足您的需求。将其分配到“按钮3(中间)”并在两个轴上拖动将适用于浏览器(Chrome),终端,Adobe Photoshop和Finder等应用程序 - 没有我试过的应用程序没有使用它(使用4.0)贝塔斯向上和向上)。它有一个免费试用版。

这取决于软件 - 例如,Firefox支持它,而谷歌Chrome则不支持。
目前,没有软件可以在OS X中启用此类功能,遗憾的是。
有一个非常好的开源应用程序称为Karabiner,它将执行此操作以及更多(键盘和鼠标重新映射等)。请参阅此问题以获取一些示例。此外,对于某些制造商,他们提供定制控制软件,可以允许改进/修改功能(例如罗技控制中心)。
正如下面的评论中提到的那样,虽然新版本的'Karabiner Elements'已经发布用于MacOS Sierra(10.12),但它目前仅提供基于键盘的重映射 - 因此目前无法使用鼠标重新映射。
然而,Hammerspoon是另一种免费的开源工具,可以用于将鼠标(和/或键盘)上的键重新映射到不同的功能。您需要安装该工具并为其提供一些适当的配置 - 请参阅此处的示例以进行鼠标重新映射。
要检查设备生成哪些事件类型和mouseEventButtonNumbers,您可以在Hammerspoon控制台中运行此命令(只需将4行复制/粘贴到控制台中)(reload config用于停止它):
hs.eventtap.new({"all"},function(e)
print(e,"mouseEventButtonNumber:",
e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber']))
end):start()
注意:如果您已安装Logitech控制中心(LCC)工具 - 它使用已安装的内核模块直接从Logitech设备获取事件,因此Hammerspoon无法看到它们。如果要使用Hammerspoon重新映射鼠标按钮,则需要卸载LCC。
我用Hammerspoon做了以下配置脚本,灵感来自这个帖子:https://github.com/tekezo/Karabiner/issues/814#issuecomment-337643019
脚步:
Open Config将以下lua脚本粘贴到配置中:
-- HANDLE SCROLLING WITH MOUSE BUTTON PRESSED
local scrollMouseButton = 2
local deferred = false
overrideOtherMouseDown = hs.eventtap.new({ hs.eventtap.event.types.otherMouseDown }, function(e)
    -- print("down")
    local pressedMouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
    if scrollMouseButton == pressedMouseButton 
        then 
            deferred = true
            return true
        end
end)
overrideOtherMouseUp = hs.eventtap.new({ hs.eventtap.event.types.otherMouseUp }, function(e)
    -- print("up")
    local pressedMouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
    if scrollMouseButton == pressedMouseButton 
        then 
            if (deferred) then
                overrideOtherMouseDown:stop()
                overrideOtherMouseUp:stop()
                hs.eventtap.otherClick(e:location(), pressedMouseButton)
                overrideOtherMouseDown:start()
                overrideOtherMouseUp:start()
                return true
            end
            return false
        end
        return false
end)
local oldmousepos = {}
local scrollmult = -4   -- negative multiplier makes mouse work like traditional scrollwheel
dragOtherToScroll = hs.eventtap.new({ hs.eventtap.event.types.otherMouseDragged }, function(e)
    local pressedMouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
    -- print ("pressed mouse " .. pressedMouseButton)
    if scrollMouseButton == pressedMouseButton 
        then 
            -- print("scroll");
            deferred = false
            oldmousepos = hs.mouse.getAbsolutePosition()    
            local dx = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaX'])
            local dy = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaY'])
            local scroll = hs.eventtap.event.newScrollEvent({-dx * scrollmult, dy * scrollmult},{},'pixel')
            -- put the mouse back
            hs.mouse.setAbsolutePosition(oldmousepos)
            return true, {scroll}
        else 
            return false, {}
        end 
end)
overrideOtherMouseDown:start()
overrideOtherMouseUp:start()
dragOtherToScroll:start()
我使用Better Touch Tool将Ctrl +中键单击分配给PgUp,选项+中键单击分配给PgDown。它是免费的,优秀的软件,并且运行良好。