在线客服

js实现简易版本圆盘、矩形抽奖

adminadmin 报建百科 2024-04-24 132 15
js实现简易版本圆盘、矩形抽奖

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」

昨天玩了一下积分抽奖,结束后,突然想自己实现一下,vue写的

圆盘抽奖

效果图

代码

html部分:

     <div class="circle" >
      <div class="bg" v-bind:style="{ transform:`rotate(${edg}deg)`,transition:'transform 4s'}"></div>
       <div class="circle-inner" @click="rotateCircle">
         <div class="circle-tran" ></div>
       </div>
    </div>

js部分:

rotateCircle(){
      this.edg = 120 + 360*2;  
},

css部分:

.circle {
  width:290px;
  height:290px;
  border-radius:100%;
  border:10px solid #000;
  position:relative;
  display:flex;
  justify-content:center;
  align-items:center;
  overflow:hidden;
}
.bg {
  background-image:url('./assets/bg.jpeg');
  background-size:100%;
  position:absolute;
  top:0;
  left:0;
  right:0;
  bottom:0;
}
.circle-inner {
  width:90px;
  height:90px;
  border-radius:100%;
  background:gold;
  border:5px solid #fff;
  position:relative;
  z-index:100;
}
.circle-tran {
  width: 0;
  height: 0;
  border: 10px solid transparent;
  border-bottom: 40px solid gold;
  position:absolute;
  top:-35%;
  left:40%;
}
说明

这里圆盘抽奖主要是利用了css的transform和transition的属性,点击中间按钮,背景图片转动,rotate函数里写了转动的度数

矩形抽奖

效果图

代码

html部分

    <div class="square">
      <div class="square-1">
        <div class="square-2" :class="{ active: this.count % 8 === 0}">奖品1</div>
        <div class="square-2" :class="{ active: this.count % 8 === 1}">奖品2</div>
        <div class="square-2" :class="{ active: this.count % 8 === 2}">奖品3</div>
      </div>
      <div class="square-1">
        <div class="square-2" :class="{ active: this.count % 8 === 7}">奖品4</div>
        <div class="square-2 tran-btn" @click="()=>this.squareRotate(16)">抽奖</div>
        <div class="square-2" :class="{ active: this.count % 8 === 3}">奖品5</div>
      </div>
      <div class="square-1">
        <div class="square-2" :class="{ active: this.count % 8 === 6}">奖品6</div>
        <div class="square-2" :class="{ active: this.count % 8 === 5}">奖品7</div>
        <div class="square-2" :class="{ active: this.count % 8 === 4}">奖品8</div>
      </div>
    </div>

js部分

    squareRotate(num){
      if(this.count>=num){
       return;
      }else{
        this.count += 1;
        setTimeout(async()=>{
           await this.squareRotate(num);
        },100)
      } 
    },

css部分

.square {
  position:relative;
}
.tran-btn {
  background:gold;
  color:#f00;
}
.active {
  background:pink;
  opacity:0.2;
}
说明

主要是利用激活背景图片来实现的,在点击抽奖时,传入一个值,用这个值this.count % 8 ,可以用来确定要转几圈,最后停留在哪一个奖品上

总结

这两个圆盘比较简单,主要利用css的属性来实现,如需真正的投入使用,还需做一系列的优化,该文章也主要是用来记录一下思路

本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!
代办报建

本公司承接江浙沪报建代办施工许可证。
联系人:张经理,18321657689(微信同号)。

喜欢0发布评论

15条评论

  • 访客 发表于 6个月前

    缺乏激情了!http://www.hnymjtl.com/

  • 游客 发表于 5个月前

    信楼主,考试不挂科!http://test.cqyiyou.net/test/

  • 游客 发表于 5个月前

    你觉得该怎么做呢?http://gry.jdrama.net

  • TG@feimiseo 发表于 4个月前

    论坛的人气越来越旺了!https://cygjczmj.com/software/20163.html

  • 指尖站群 发表于 3个月前

    在哪里跌倒,就在那里多爬一会儿!http://www.adstone.cn

  • telegram官网 发表于 2周前

    突然觉得楼主说的很有道理,赞一个!https://www.telegramuc.com/

  • telegram下载 发表于 1周前

    楼主的帖子实在是写得太好了。文笔流畅,修辞得体!https://www.telegramuc.com/

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址