Maison >interface Web >Questions et réponses frontales >Comment supprimer les autocollants en vue

Comment supprimer les autocollants en vue

WBOY
WBOYoriginal
2023-05-25 10:40:07451parcourir

Créer des applications Web basées sur vue.js est devenu le choix de plus en plus de développeurs front-end. La mise en œuvre de la fonction autocollant est également devenue un élément important de nombreuses applications sociales. Dans la pile technologique vue.js, comment implémenter la fonction sticker ? Cet article donnera une introduction détaillée à la méthode d'implémentation des autocollants dans vue.js.

1. Préparer le matériel

Pour implémenter la fonction d'autocollant dans vue.js, vous devez préparer le matériel pertinent. C'est-à-dire le dossier contenant les images d'autocollants et les fichiers de données associés (tels que le nom de l'autocollant, l'emplacement, etc.). Ici, nous pouvons utiliser require.ensure pour charger les fichiers de matériaux de manière asynchrone, afin que l'application puisse répondre rapidement aux opérations de l'utilisateur et réduire le temps de chargement des pages.

2. Afficher les autocollants

Pour afficher les autocollants dans vue.js, nous devons utiliser la fonction de rendu de vue.js pour ajouter des éléments d'autocollant à la page. Sur cette base, nous pouvons obtenir des effets interactifs tels que le glissement et le zoom d'autocollants en surveillant les événements de la souris de l'utilisateur.

1. Rendre les autocollants

Dans la fonction de rendu de vue.js, nous pouvons parcourir le tableau d'autocollants via l'instruction v-for et restituer chaque autocollant sur la page.

render(h) {
  return h('div', {
    class: 'sticker-wrapper',
  },
  this.$store.state.stickers.map(sticker => {
    return h('img', {
      class: 'sticker',
      style: {
        top: `${sticker.y}px`,
        left: `${sticker.x}px`,
        width: `${sticker.width}px`,
      },
      domProps: {
        src: sticker.src,
      },
      on: {
        mousedown: (event) => {
          this.dragSticker(event, sticker);
        },
      },
    });
  }));
}

2. Glissement d'autocollants

En écoutant les événements de la souris, nous pouvons obtenir l'effet de glissement des autocollants.

dragSticker(event, sticker) {
  this.selectedSticker = sticker;
  this.dragging = true;
  this.mouseStartX = event.clientX;
  this.mouseStartY = event.clientY;
  this.stickerStartX = sticker.x;
  this.stickerStartY = sticker.y;
  window.addEventListener('mousemove', this.moveSticker);
  window.addEventListener('mouseup', this.finishDrag);
},
moveSticker(event) {
  if (!this.dragging || !this.selectedSticker) {
    return;
  }
  const deltaX = event.clientX - this.mouseStartX;
  const deltaY = event.clientY - this.mouseStartY;
  this.selectedSticker.x = this.stickerStartX + deltaX;
  this.selectedSticker.y = this.stickerStartY + deltaY;
},
finishDrag() {
  this.dragging = false;
  this.selectedSticker = null;
  window.removeEventListener('mousemove', this.moveSticker);
  window.removeEventListener('mouseup', this.finishDrag);
},

3. Mise à l'échelle des autocollants

Semblable à l'effet glisser-déposer, nous pouvons également ajuster dynamiquement la taille de l'autocollant en écoutant les événements de la souris de l'utilisateur.

resizeSticker(event, sticker, handle) {
  this.selectedSticker = sticker;
  event.stopPropagation();
  this.resizing = handle;
  this.mouseStartX = event.clientX;
  this.mouseStartY = event.clientY;
  this.stickerStartX = sticker.x;
  this.stickerStartY = sticker.y;
  this.stickerWidth = sticker.width;
  window.addEventListener('mousemove', this.handleResize);
  window.addEventListener('mouseup', this.finishResize);
},
handleResize(event) {
  if (!this.resizing || !this.selectedSticker) {
    return;
  }
  const deltaX = event.clientX - this.mouseStartX;
  const deltaY = event.clientY - this.mouseStartY;
  const scale = Math.min(Math.abs(deltaX), Math.abs(deltaY));
  if (this.resizing === 'nw') {
    this.selectedSticker.x = this.stickerStartX + deltaX;
    this.selectedSticker.y = this.stickerStartY + deltaY;
    this.selectedSticker.width = this.stickerWidth - scale;
  } else if (this.resizing === 'ne') {
    this.selectedSticker.y = this.stickerStartY + deltaY;
    this.selectedSticker.width = this.stickerWidth + scale;
  } else if (this.resizing === 'sw') {
    this.selectedSticker.x = this.stickerStartX + deltaX;
    this.selectedSticker.width = this.stickerWidth - scale;
  } else if (this.resizing === 'se') {
    this.selectedSticker.width = this.stickerWidth + scale;
  }
},
finishResize() {
  this.resizing = null;
  this.selectedSticker = null;
  window.removeEventListener('mousemove', this.handleResize);
  window.removeEventListener('mouseup', this.finishResize);
},

3. Stocker les informations de localisation des autocollants

Afin que les utilisateurs puissent obtenir les informations de localisation des autocollants précédents la prochaine fois qu'ils ouvriront l'application, nous pouvons stocker le tableau d'autocollants dans l'état global de vuex et gérer les modifications des données d'autocollants via vuex.

mutations: {
  addSticker(state, newSticker) {
    state.stickers.push(newSticker);
  },
  removeSticker(state, sticker) {
    state.stickers.splice(state.stickers.indexOf(sticker), 1);
  },
  updateSticker(state, payload) {
    const sticker = payload.sticker;
    if (payload.prop === 'x') {
      sticker.x = payload.value;
    } else if (payload.prop === 'y') {
      sticker.y = payload.value;
    } else if (payload.prop === 'width') {
      sticker.width = payload.value;
    }
  },
},

En combinant les données gérées dans vuex avec les propriétés calculées du composant, nous pouvons facilement réaliser une liaison bidirectionnelle des données.

computed: {
  ...mapState(['stickers']),
},

4. Résumé

Grâce à la fonction de rendu de vue.js et à la gestion des données de vuex, nous pouvons facilement réaliser l'effet interactif de la fonction d'autocollant et enregistrer les informations de position de l'autocollant dans l'état global pour faciliter la prochaine ouverture. de l'application pour restaurer les informations de localisation de l'autocollant. Dans le même temps, nous devons également veiller à éviter les problèmes tels que les autocollants qui se chevauchent et sortent de l'écran afin d'améliorer l'expérience utilisateur.

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:
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