vue3實現(xiàn)抽獎模板設(shè)置
本文實例為大家分享了vue3實現(xiàn)抽獎模板設(shè)置的具體方法,供大家參考,具體內(nèi)容如下
效果圖

代碼
<template>
? <div>
? ? <h4>抽獎模板設(shè)置</h4>
? ? <div class="container">
? ? ? <ul class="ul-box">
? ? ? ? <li
? ? ? ? ? v-for="(item,index) in list"
? ? ? ? ? :key="item.id"
? ? ? ? ? @click.stop="handleClickItem(item,index)"
? ? ? ? >
? ? ? ? ? {{item.id}}-{{item.title}}
? ? ? ? </li>
? ? ? </ul>
? ? ? <div
? ? ? ? class="pop-box"
? ? ? ? v-show="visible"
? ? ? >
? ? ? ? <div
? ? ? ? ? class="popup"
? ? ? ? ? :style="{left:clickIndexList[0]+'px',top:clickIndexList[1]+'px'}"
? ? ? ? >
? ? ? ? ? <span><em></em></span>
? ? ? ? ? <div>
? ? ? ? ? ? <p
? ? ? ? ? ? ? class="p-title"
? ? ? ? ? ? ? v-for="(item) in selectList"
? ? ? ? ? ? ? :key="item.id"
? ? ? ? ? ? ? @click.stop="handleChoose(item)"
? ? ? ? ? ? >{{item.title}}</p>
? ? ? ? ? </div>
? ? ? ? </div>
? ? ? </div>
? ? </div>
? </div>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs, onMounted } from 'vue';
const WIDTH = 100;
export default defineComponent({
? name: 'test',
? components: {},
? setup() {
? ? const state = reactive({
? ? ? list: [
? ? ? ? { id: 1 },
? ? ? ? { id: 2 },
? ? ? ? { id: 3 },
? ? ? ? { id: 4 },
? ? ? ? { id: 5, title: '抽獎' },
? ? ? ? { id: 6 },
? ? ? ? { id: 7 },
? ? ? ? { id: 8 },
? ? ? ? { id: 9 },
? ? ? ],
? ? ? selectList: [
? ? ? ? { id: 1, title: '謝謝參與' },
? ? ? ? { id: 2, title: 'iphone13' },
? ? ? ? { id: 3, title: '領(lǐng)克06' },
? ? ? ? { id: 4, title: '華為p40' },
? ? ? ],
? ? ? visible: false,
? ? ? clickIndexList: [],
? ? ? clickIndex: 0,
? ? });
? ? const xyList = [
? ? ? [0, 0],
? ? ? [WIDTH, 0],
? ? ? [WIDTH * 2, 0],
? ? ? [0, WIDTH],
? ? ? [WIDTH, WIDTH],
? ? ? [WIDTH * 2, WIDTH],
? ? ? [0, WIDTH * 2],
? ? ? [WIDTH, WIDTH * 2],
? ? ? [WIDTH * 2, WIDTH * 2],
? ? ];
? ? const hide = () => {
? ? ? state.visible = false;
? ? };
? ? onMounted(() => {
? ? ? document.addEventListener('click', hide);
? ? });
? ? const handleClickItem = (item, index) => {
? ? ? if (index === 4) {
? ? ? ? return;
? ? ? }
? ? ? state.clickIndexList = xyList[index];
? ? ? state.clickIndex = index;
? ? ? state.visible = true;
? ? };
? ? const handleChoose = (item) => {
? ? ? state.list[state.clickIndex].title = item.title;
? ? ? hide();
? ? };
? ? return {
? ? ? handleClickItem,
? ? ? hide,
? ? ? handleChoose,
? ? ? ...toRefs(state),
? ? };
? },
});
</script>
<style lang="less" scoped>
.container {
? position: relative;
? .ul-box {
? ? display: flex;
? ? flex-wrap: wrap;
? ? width: 300px;
? ? li {
? ? ? width: 100px;
? ? ? height: 100px;
? ? ? background: pink;
? ? ? border: 1px solid #fff;
? ? ? display: flex;
? ? ? justify-content: center;
? ? ? align-items: center;
? ? ? cursor: pointer;
? ? }
? }
? .p-title {
? ? margin: 0;
? ? min-width: 150px;
? ? font-size: 14px;
? ? line-height: 1.4;
? ? padding: 10px 20px;
? ? cursor: pointer;
? }
? .p-title:hover {
? ? background: #e6ebf5;
? }
? .pop-box .popup {
? ? width: 200px;
? ? background: #fff;
? ? color: #333;
? ? border-radius: 4px;
? ? position: absolute;
? ? top: 30px;
? ? left: 30px;
? ? border: 1px solid #e6ebf5;
? ? margin-left: -50px;
? ? margin-top: 60px;
? ? z-index: 9999;
? ? animation: left 1s;
? }
? .pop-box .popup span {
? ? display: block;
? ? width: 0;
? ? height: 0;
? ? border-width: 0 10px 10px;
? ? border-style: solid;
? ? border-color: transparent transparent #e6ebf5;
? ? position: absolute;
? ? top: -10px;
? ? left: 50%; /* 三角形居中顯示 */
? ? margin-left: -10px; /* 三角形居中顯示 */
? }
? .pop-box .popup em {
? ? display: block;
? ? width: 0;
? ? height: 0;
? ? border-width: 0 10px 10px;
? ? border-style: solid;
? ? border-color: transparent transparent #fff;
? ? position: absolute;
? ? top: 1px;
? ? left: -10px;
? }
}
</style>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue子組件設(shè)計provide和inject理解使用
這篇文章主要為大家介紹了vue子組件設(shè)計provide和inject理解及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
淺談vue中關(guān)于checkbox數(shù)據(jù)綁定v-model指令的個人理解
這篇文章主要介紹了淺談vue中關(guān)于checkbox數(shù)據(jù)綁定v-model指令的個人理解,v-model用于表單的數(shù)據(jù)綁定很常見,下面就來詳細(xì)的介紹一下2018-11-11
Vue3實現(xiàn)Element Plus表格的多選功能與條件操作
Element-plus是ElementUI的升級版,是一套基于vue2與vue3的桌面端組件庫,它提供了豐富的組件幫助開發(fā)人員快速構(gòu)建功能強(qiáng)大、風(fēng)格統(tǒng)一的頁面,本文給大家介紹了Vue3實現(xiàn)Element Plus表格的多選功能與條件操作,需要的朋友可以參考下2024-08-08
vue 自定義組件 v-model雙向綁定、 父子組件同步通信的多種寫法
父子組件通信,都是單項的,很多時候需要雙向通信。這篇文章主要介紹了vue 自定義組件 v-model雙向綁定、 父子組件同步通信,需要的朋友可以參考下2017-11-11
vue2中的el-select組件數(shù)據(jù)太多,如何實現(xiàn)滾動加載數(shù)據(jù)效果
這篇文章主要介紹了vue2中的el-select組件數(shù)據(jù)太多,如何實現(xiàn)滾動加載數(shù)據(jù)效果,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
Vue實現(xiàn)PC端分辨率自適應(yīng)的示例代碼
本文主要介紹了Vue實現(xiàn)PC端分辨率自適應(yīng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
vue實現(xiàn)修改標(biāo)簽中的內(nèi)容:id class style
這篇文章主要介紹了vue實現(xiàn)修改標(biāo)簽中的內(nèi)容:id class style,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

