vue3实现抽奖模板设置

 更新时间:2022年03月09日 10:27:19   作者:吃瓜群众欢乐多  
这篇文章主要为大家详细介绍了vue3实现抽奖模板设置,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了vue3实现抽奖模板设置的具体方法,供大家参考,具体内容如下

效果图

代码

<template>
  <div>
    <h4>抽奖模板设置</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: '领克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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • vue实现简易音乐播放器

    vue实现简易音乐播放器

    这篇文章主要为大家详细介绍了vue实现简易音乐播放器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • vue路由跳转打开新窗口(window.open())和关闭窗口(window.close())

    vue路由跳转打开新窗口(window.open())和关闭窗口(window.close())

    这篇文章主要介绍了vue路由跳转打开新窗口(window.open())和关闭窗口(window.close())问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue父组件中获取子组件中的数据(实例讲解)

    vue父组件中获取子组件中的数据(实例讲解)

    下面小编就为大家带来一篇vue父组件中获取子组件中的数据(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • vue @tap事件之$event用法介绍

    vue @tap事件之$event用法介绍

    这篇文章主要介绍了vue @tap事件之$event用法介绍,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • vue 使用post/get 下载导出文件操作

    vue 使用post/get 下载导出文件操作

    这篇文章主要介绍了vue 使用post/get 下载导出文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • element的el-date-picker组件实现只显示年月日时分效果(不显示秒)

    element的el-date-picker组件实现只显示年月日时分效果(不显示秒)

    最近遇到这样的需求使用element的el-date-picker组件,只显示时分,不显示秒,下面小编给大家分享element的el-date-picker组件实现只显示年月日时分效果,感兴趣的朋友一起看看吧
    2024-08-08
  • Vue3如何处理异步任务轮询

    Vue3如何处理异步任务轮询

    在许多应用程序中,我们经常需要执行定期的异步任务轮询,本文就介绍了Vue3如何处理异步任务轮询,感兴趣的可以了解一下
    2023-05-05
  • typescript+vite项目配置别名的方法实现

    typescript+vite项目配置别名的方法实现

    我们为了省略冗长的路径,经常喜欢配置路径别名,本文主要介绍了typescript+vite项目配置别名的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • vue3使用el-radio-group获取表格数据无法选中问题及解决方法

    vue3使用el-radio-group获取表格数据无法选中问题及解决方法

    这篇文章主要介绍了vue3使用el-radio-group获取表格数据无法选中问题及解决方法,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • Vue.js如何监听window窗口尺寸变化

    Vue.js如何监听window窗口尺寸变化

    使用VUE开发后台项目,后台项目需要进行后台根据浏览器窗口进行变化,需要使用vue来监听浏览器的窗口变化,这篇文章主要给大家介绍了关于Vue.js如何监听window窗口尺寸变化的相关资料,需要的朋友可以参考下
    2023-11-11

最新评论