Home >Web Front-end >JS Tutorial >How to Zoom a Canvas to the Mouse Cursor Position in HTML5?

How to Zoom a Canvas to the Mouse Cursor Position in HTML5?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 02:39:30882browse

How to Zoom a Canvas to the Mouse Cursor Position in HTML5?

Zooming a Canvas to the Mouse Cursor

When creating an interactive HTML5 project involving zooming, aligning the zoom with the cursor's position is crucial for a user-friendly experience. This article aims to guide you through the calculations necessary to implement this functionality.

Problem:

How can we zoom a canvas relative to the cursor's position, similar to Google Maps?

Variables Available:

  • Image coordinates (x, y)
  • Image dimensions (width, height)
  • Cursor coordinates relative to the canvas center (cursor_x, cursor_y)

Solution:

  1. Translate the Canvas: Shift the canvas context based on the cursor's offset, allowing zooming around the cursor.
  2. Scale the Canvas: Adjust the scale factor to zoom in or out.
  3. Translate Back: Return the canvas context to its original position, compensating for the initial translation.

Here's the code snippet:

<code class="javascript">ctx.translate(cursor_x, cursor_y);
ctx.scale(factor, factor);
ctx.translate(-cursor_x, -cursor_y);</code>

Example in Action:

Visit http://phrogz.net/tmp/canvas_zoom_to_cursor.html for a live demonstration. It supports dragging and zooming with mouse clicks and the scroll wheel.

Note:

  • For accurate zooming, transform the cursor position from screen space to the transformed canvas context.
  • Currently, Safari's zooming behavior differs from other browsers, resulting in excessive zooming.

The above is the detailed content of How to Zoom a Canvas to the Mouse Cursor Position in HTML5?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn