Build zoomable and pannable SVG canvas

Any ideas on how to simulate these? Doing something like `zoom.scale(20).event(canvas)` sets the scale to 20 even if the `zoomExtent` is `[1, 10]`. Simulating actual `mousescroll` events doesn't seem to work either.