In recent years, front-end development technology has developed rapidly. As one of the most popular front-end frameworks in recent years, Vue has been loved and sought after by many developers. In the actual development process, Vue is often used in the display and rendering of product lists. However, a simple product list display cannot meet the needs of users. Designing a staggered product list can increase the artistic sense and user experience of the page. Let's introduce the method of realizing staggered arrangement of product lists in Vue.
To realize the staggered arrangement of the product list, the following steps are required:
Let’s look at the specific implementation of these steps separately.
First, we need to prepare some product list data, including product name, product pictures, product price and other information . These data can be stored in a JavaScript file, for example:
const goods = [ { id: 1, name: 'Apple iPhone 12', price: 6999, image: 'https://xxx.com/xxx.jpg' }, { id: 2, name: 'Samsung Galaxy S21', price: 7999, image: 'https://xxx.com/xxx.jpg' }, // ... ];
In Vue, we can use the v-for instruction to render product cards. The specific implementation is as follows:
<template> <div class="goods-list"> <div class="goods-card" v-for="item in goods" :key="item.id" > <img :src="item.image" alt="商品图片" /> <div class="info"> <p class="name">{{ item.name }}</p> <p class="price">¥{{ item.price }}</p> </div> </div> </div> </template>
According to the requirements of the misalignment, we need to calculate the position of each product card . We can calculate its misalignment by getting the width and height of the product card and the width of the container. The specific implementation is as follows:
computed: { // 计算出商品卡片的宽度 cardWidth() { const containerWidth = /* 获取容器宽度 */; const gutter = /* 获取卡片之间的间距 */; const columnNum = /* 获取列数 */; return (containerWidth - gutter * (columnNum - 1)) / columnNum; }, // 计算出商品卡片的高度 cardHeight() { return /* 获取商品卡片的高度 */; }, // 计算出每个商品卡片的错位位置 positions() { const cardList = /* 获取商品卡片列表 */; const gutter = /* 获取卡片之间的间距 */; const positions = []; let x = 0; let y = 0; cardList.forEach((card, index) => { positions.push({ x, y }); x += index % 2 === 0 ? this.cardWidth + gutter : -this.cardWidth - gutter; y += index % 2 === 0 ? 0 : this.cardHeight + gutter; }); return positions; } }
Finally, we can apply the position calculated in positions to each product card. The specific implementation is as follows:
<template> <div class="goods-list"> <div class="goods-card" v-for="(item, index) in goods" :key="item.id" :style="{ left: positions[index].x + 'px', top: positions[index].y + 'px' }" > <img :src="item.image" alt="商品图片" /> <div class="info"> <p class="name">{{ item.name }}</p> <p class="price">¥{{ item.price }}</p> </div> </div> </div> </template>
This article introduces the method of realizing misaligned arrangement of product lists in Vue. Through the above steps, we can easily realize a unique and beautiful product list, which not only improves the user experience but also enhances the artistic sense of the page. In order for you to better understand the content described in this article, it is recommended that you implement it manually after completing reading. Hope this article can be helpful to you.
The above is the detailed content of How to implement the misaligned arrangement function of product list in vue. For more information, please follow other related articles on the PHP Chinese website!