Vue ist ein beliebtes JavaScript-Framework, das für seine Benutzerfreundlichkeit und Flexibilität bekannt ist. In diesem Artikel untersuchen wir, wie man den parabolischen Effekt in Vue implementiert, um Benutzern ein besseres Erlebnis beim Hinzufügen von Artikeln zum Warenkorb zu bieten.
Um den Effekt des Werfens von Objekten zu erzielen, können wir den vue-beautiful-dnd-Plugin verwenden -In. Sie können es über den NPM-Paketmanager mit dem folgenden Befehl installieren:
npm install vue-beautiful-dnd --save
Nachdem die Installation abgeschlossen ist, müssen Sie es in Ihre Vue-Anwendung einführen:
import Vue from 'vue' import { DragDrop } from 'vue-beautiful-dnd' Vue.use(DragDrop)
<template> <div> <h2>您的购物车</h2> <div class="cart-items"> <div v-for="(item, index) in cartItems" :key="index" class="cart-item"> <img :src="item.image" :alt="item.title"> <div class="item-details"> <h4>{{ item.title }}</h4> <span>{{ item.price }}</span> </div> <button @click="handleAddToCart(item)">添加到购物车</button> </div> </div> <div class="cart-dropdown" v-if="showCart"> <div class="droppable" ref="cart"> <div class="cart-item" v-for="(item, index) in cart" :key="item.id"> <img :src="item.image" :alt="item.title"> <div class="item-details"> <h4>{{ item.title }}</h4> <span>{{ item.price }}</span> </div> <button @click="handleRemoveFromCart(item)">删除</button> </div> </div> <div class="cart-total"> <span>总计: {{ total }}</span> </div> </div> </div> </template>
<script> export default { data() { return { cartItems: [ { id: 1, title: '商品1', price: 12.99, image: 'path/to/image' }, { id: 2, title: '商品2', price: 24.99, image: 'path/to/image' }, { id: 3, title: '商品3', price: 8.99, image: 'path/to/image' } ], cart: [], showCart: false } }, computed: { total() { return this.cart.reduce((total, item) => total + item.price, 0) } }, methods: { handleAddToCart(item) { this.cart.push(item) this.showCart = true }, handleRemoveFromCart(item) { const index = this.cart.findIndex(cartItem => cartItem.id === item.id) this.cart.splice(index, 1) } } } </script>
<template> <div> <!-- div.cart-items 代码序列不变 --> <div class="cart-dropdown" v-if="showCart"> <div class="droppable" ref="cart"> <div ref="droppable" class="cart-item" v-for="(item, index) in cart" :key="item.id" > <img :src="item.image" :alt="item.title"> <div class="item-details"> <h4>{{ item.title }}</h4> <span>{{ item.price }}</span> </div> <button @click="handleRemoveFromCart(item)">删除</button> </div> </div> <div class="cart-total"> <span>总计: {{ total }}</span> </div> </div> </div> </template> <script> import { Drag, Drop } from 'vue-beautiful-dnd' export default { // data、computed、methods 部分省略 components: { Drag, Drop }, methods: { handleAddToCart(item, event) { const cartEle = this.$refs.cart this.cart.push(item) const droppableEle = this.$refs.droppable const draggableEle = event.target.closest('.cart-item') const start = { x: draggableEle.offsetLeft, y: draggableEle.offsetTop } const end = { x: cartEle.offsetLeft + droppableEle.offsetLeft + droppableEle.offsetWidth / 2, y: cartEle.offsetTop + droppableEle.offsetTop + droppableEle.offsetHeight / 2 } const distance = Math.sqrt( Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2) ) const time = 500 const speed = distance / time const path = anime.path( `M${start.x} ${start.y} Q ${(start.x + end.x) / 2} ${(start.y + end.y) / 2} ${end.x} ${end.y}` ) anime({ targets: draggableEle, translateX: path('x') - start.x, translateY: path('y') - start.y, duration: time, easing: 'easeOutQuad', complete: () => { anime({ targets: draggableEle, translateY: 0, translateX: 0, duration: 200 }) this.showCart = true } }) } } } </script>
Das obige ist der detaillierte Inhalt vonAn einem Beispiel wird erläutert, wie Vue die Funktion zum Hinzufügen eines Warenkorbs und zum Werfen von Objekten implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!