Maison interface Web Questions et réponses frontales Comment utiliser JavaScript pour implémenter le zoom et la rotation du canevas de sélection de cadre

Comment utiliser JavaScript pour implémenter le zoom et la rotation du canevas de sélection de cadre

Apr 24, 2023 am 09:08 AM

Avec le développement d'Internet, JavaScript est devenu de plus en plus utilisé. Dans le développement front-end, en particulier dans le domaine de l'édition graphique, le zoom et la rotation du canevas sont une fonction très importante. Dans le prochain article, nous présenterons comment utiliser JavaScript pour réaliser le zoom et la rotation du canevas de sélection de cadre.

Étape 1 : Créer le canevas

Avant de commencer à implémenter le zoom et la rotation du canevas sélectionné dans la boîte, nous devons créer le canevas. En HTML, nous pouvons créer un canevas à l'aide de la balise Tout d'abord, nous devons définir la largeur et la hauteur du canevas, comme indiqué ci-dessous :

<canvas id="myCanvas" width="500" height="500"></canvas>
Copier après la connexion

En JavaScript, nous pouvons utiliser le code suivant pour obtenir l'élément canevas :

var canvas = document.getElementById("myCanvas");
Copier après la connexion

Ensuite, nous pouvons obtenir le contexte 2D via la méthode getContext. de toile, comme indiqué ci-dessous :

var context = canvas.getContext("2d");
Copier après la connexion

De cette façon, nous avons réussi à créer une toile et un contexte, puis nous pouvons dessiner sur la toile.

Étape 2 : Dessiner des graphiques

Dans cette démo, nous allons dessiner trois rectangles différents et les afficher sur la toile. En JavaScript, nous dessinons un rectangle en utilisant la méthode fillRect de canvas. Le premier paramètre de cette méthode est la coordonnée x du coin supérieur gauche du rectangle, le deuxième paramètre est la coordonnée y du coin supérieur gauche du rectangle, le troisième paramètre est la largeur du rectangle et le quatrième paramètre est la hauteur du rectangle, comme suit :

context.fillRect(x, y, width, height);
Copier après la connexion

Le code pour dessiner trois rectangles est le suivant :

//矩形1
context.fillStyle="red";
context.fillRect(50,50,100,100);

//矩形2
context.fillStyle="green";
context.fillRect(200,200,100,100);

//矩形3
context.fillStyle="blue";
context.fillRect(350,350,100,100);
Copier après la connexion

Avec le code ci-dessus, nous avons réussi à dessiner trois rectangles sur la toile.

Étape 3 : Implémenter la sélection de cadre

Ensuite, nous commençons à implémenter la fonction de sélection de cadre. Le processus d'implémentation spécifique est le suivant :

  1. Tout d'abord, nous devons enregistrer le point de départ de la souris, le code est le suivant :
var startX, startY;
canvas.addEventListener("mousedown", function(e) {
  startX = e.pageX - canvas.offsetLeft;
  startY = e.pageY - canvas.offsetTop;
}, false);
Copier après la connexion
  1. Ensuite, nous devons enregistrer le mouvement de la souris, le code est le suivant :
canvas.addEventListener("mousemove", function(e) {
    if (e.buttons === 1) { // 按下鼠标左键拖动
        var moveX = e.pageX - startX;
        var moveY = e.pageY - startY;
        context.clearRect(0, 0, canvas.width, canvas.height);
        drawRectangles(moveX, moveY);
    }
}, false);
Copier après la connexion
  1. Enfin, nous devons enregistrer le point final de la souris lorsque la souris est relâchée, le code est le suivant suit :
canvas.addEventListener("mouseup", function(e) {
    var endX = e.pageX - canvas.offsetLeft;
    var endY = e.pageY - canvas.offsetTop;
    var moveX = endX - startX;
    var moveY = endY - startY;
    context.clearRect(0, 0, canvas.width, canvas.height);
    drawRectangles(moveX, moveY);
}, false);
Copier après la connexion

Grâce au code ci-dessus, nous avons implémenté avec succès la fonction de sélection de cadre, qui peut être passée Faites glisser le bouton gauche de la souris pour sélectionner un rectangle sur le canevas.

Étape 4 : Implémenter la mise à l'échelle du canevas

Ensuite, nous implémenterons la fonction de mise à l'échelle du canevas. Le processus de mise en œuvre spécifique est le suivant :

  1. Tout d'abord, nous devons définir une échelle variable, qui représente le rapport de mise à l'échelle du canevas. La valeur par défaut est 1,0. Le code est le suivant :
var scale = 1.0;
Copier après la connexion
  1. Ensuite, nous. ajoutez un écouteur d'événement de roue au canevas, Le code est le suivant :
canvas.addEventListener("wheel", function(e) {
    e.preventDefault();
    var wheelDelta = e.deltaY;
    if (wheelDelta > 0) scale -= 0.1;
    else scale += 0.1;
    context.clearRect(0, 0, canvas.width, canvas.height);
    drawRectangles(0, 0); // 传递0,0以清除框选效果
}, false);
Copier après la connexion
  1. Enfin, nous devons définir le taux de zoom du canevas avant de dessiner les graphiques. Le code est le suivant :
context.scale(scale, scale);
Copier après la connexion

Grâce à ce qui précède. code, nous avons implémenté avec succès la fonction de zoom du canevas, qui peut être effectuée en faisant tourner la molette de la souris pour zoomer ou dézoomer sur le canevas.

Étape 5 : Implémenter la rotation du canevas

Ensuite, nous implémenterons la fonction de rotation du canevas. Le processus spécifique de mise en œuvre est le suivant :

  1. Tout d'abord, nous devons définir un angle variable, qui représente l'angle de rotation du canevas. La valeur par défaut est 0. Le code est le suivant :
var angle = 0;
Copier après la connexion
  1. Ensuite, nous. ajoutez un événement clic droit sur le canevas Monitoring, le code est le suivant :
canvas.addEventListener("mouseup", function(e) {
    if (e.button === 2) { // 按下鼠标右键
        angle += 90;
        context.clearRect(0, 0, canvas.width, canvas.height);
        drawRectangles(0, 0); // 传递0,0以清除框选效果
    }
}, false);
Copier après la connexion
  1. Enfin, il faut définir la matrice de transformation du canevas avant de dessiner les graphiques, le code est le suivant :
context.setTransform(Math.cos(angle), Math.sin(angle), -Math.sin(angle), Math.cos(angle), canvas.width / 2, canvas.height / 2);
Copier après la connexion

Par Avec le code ci-dessus, nous avons implémenté avec succès la fonction de rotation du canevas, qui peut être effectuée via le clic droit de la souris pour faire pivoter.

En résumé, nous avons implémenté avec succès la fonction de zoom et de rotation du canevas de sélection de cadre à l'aide de JavaScript. Ces fonctions sont très importantes dans le domaine de l'édition graphique et contribuent à améliorer l'expérience utilisateur et l'efficacité opérationnelle. Si vous devez utiliser ces fonctions dans votre projet, vous pouvez développer sur la base du code ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Qu'est-ce que l'utilisation Effecte? Comment l'utilisez-vous pour effectuer des effets secondaires? Qu'est-ce que l'utilisation Effecte? Comment l'utilisez-vous pour effectuer des effets secondaires? Mar 19, 2025 pm 03:58 PM

L'article traite de l'utilisation Effecte dans React, un crochet pour gérer les effets secondaires comme la récupération des données et la manipulation DOM dans les composants fonctionnels. Il explique l'utilisation, les effets secondaires courants et le nettoyage pour éviter des problèmes comme les fuites de mémoire.

Comment fonctionne l'algorithme de réconciliation React? Comment fonctionne l'algorithme de réconciliation React? Mar 18, 2025 pm 01:58 PM

L'article explique l'algorithme de réconciliation de React, qui met à jour efficacement le DOM en comparant les arbres DOM virtuels. Il traite des avantages de la performance, des techniques d'optimisation et des impacts sur l'expérience utilisateur. Compte de charge: 159

Quelles sont les fonctions d'ordre supérieur en JavaScript, et comment peuvent-ils être utilisés pour écrire du code plus concis et réutilisable? Quelles sont les fonctions d'ordre supérieur en JavaScript, et comment peuvent-ils être utilisés pour écrire du code plus concis et réutilisable? Mar 18, 2025 pm 01:44 PM

Les fonctions d'ordre supérieur dans JavaScript améliorent la concision du code, la réutilisabilité, la modularité et les performances par abstraction, modèles communs et techniques d'optimisation.

Comment fonctionne le currying en JavaScript et quels sont ses avantages? Comment fonctionne le currying en JavaScript et quels sont ses avantages? Mar 18, 2025 pm 01:45 PM

L'article traite du curry dans JavaScript, une technique transformant les fonctions mulguments en séquences de fonctions à argument unique. Il explore la mise en œuvre du currying, des avantages tels que des applications partielles et des utilisations pratiques, améliorant le code

Qu'est-ce que UseContext? Comment l'utilisez-vous pour partager l'état entre les composants? Qu'est-ce que UseContext? Comment l'utilisez-vous pour partager l'état entre les composants? Mar 19, 2025 pm 03:59 PM

L'article explique UseContext dans React, qui simplifie la gestion de l'État en évitant le forage des accessoires. Il traite des avantages tels que les améliorations centralisées de l'État et des performances grâce à des redevances réduites.

Comment connectez-vous les composants React au magasin Redux à l'aide de Connect ()? Comment connectez-vous les composants React au magasin Redux à l'aide de Connect ()? Mar 21, 2025 pm 06:23 PM

L'article discute de la connexion des composants React à Redux Store à l'aide de Connect (), expliquant MapStateToproprop, MapDispatchToprops et des impacts de performances.

Comment empêchez-vous le comportement par défaut dans les gestionnaires d'événements? Comment empêchez-vous le comportement par défaut dans les gestionnaires d'événements? Mar 19, 2025 pm 04:10 PM

L'article discute de la prévention des comportements par défaut dans les gestionnaires d'événements à l'aide de la méthode empêchée dedEfault (), de ses avantages tels que une expérience utilisateur améliorée et des problèmes potentiels tels que les problèmes d'accessibilité.

Quels sont les avantages et les inconvénients des composants contrôlés et incontrôlés? Quels sont les avantages et les inconvénients des composants contrôlés et incontrôlés? Mar 19, 2025 pm 04:16 PM

L'article traite des avantages et des inconvénients des composants contrôlés et incontrôlés dans la réaction, en se concentrant sur des aspects tels que la prévisibilité, la performance et les cas d'utilisation. Il conseille les facteurs à considérer lors du choix entre eux.

See all articles