jquery与vue结合的老虎机抽奖

先在index.html引入jquery.js和动画jquery.easing.min.js

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  <meta name="referrer" content="no-referrer" />
  <title>game</title>
  <script src='https://libs.baidu.com/jquery/1.10.2/jquery.min.js'></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script>
</head>

<body>
  <noscript>
    <strong>We're sorry but game doesn't work properly without JavaScript enabled. Please enable it to
      continue.</strong>
  </noscript>
  <div id="app"></div>
  <!-- built files will be auto injected -->
</body>
</html>

抽奖页面如下 图片换上自已页面的图片,注意:抽奖的奖品图要用雪碧图

<template>
  <div class="section">
    <div class="machine">
      <dl class="rotate_box clear">
        <dd></dd>
        <dd></dd>
        <dd></dd>
      </dl>
      <a class="poiner" href="">
        <img src="../assets/images/poiner.png" alt="" />
      </a>
      <a class="rotate_btn" href="javascript: void(0);">
        <img src="../assets/images/rocker.png" alt="" />
      </a>
      <div class="btn_box">
        <img src="../assets/images/share_btn.png" alt="" />
      </div>
    </div>
  </div>
</template>
<script>
import newFunction from '@/api/draw.js'
export default {
  data () {
    return {
      parizelist: [
        { prizeid: '2021', prizename: '谢谢参与' },
        { prizeid: '2022', prizename: '京东卡100元' },
        { prizeid: '2023', prizename: '话费50兑换券' },
        { prizeid: '2024', prizename: '滴滴打车5元券' }
      ],
      parize: { prizeid: '2022', prizename: '京东卡100元' },// 中奖的奖品
    }
  },
  mounted () {
    newFunction(this.parizelist, this.parize)
  },
  methods: {

  }
}
</script>
<style scoped>
img {
  display: block;
  width: 100%;
}

.section {
  position: relative;
  margin: 0 auto;
  width: 10rem;
  height: 100%;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  background: rebeccapurple;
}
.machine {
  width: 8.77333rem;
  height: 11.52rem;
  background: url("../assets/images/machine_bg.png");
  background-size: cover;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
.rotate_box {
  width: 60%;
  margin: 0 auto;
  padding-top: 37%;
}
.rotate_box dd {
  width: 32%;
  height: 3.46667rem;
  margin-right: 2%;
  float: left;
  background: url("../assets/images/prizes.png");
  background-size: cover;
}
.rotate_box dd:last-child {
  margin-right: 0;
}
.rotate_btn {
  width: 0.58667rem;
  height: 1.78667rem;
  overflow: hidden;
  position: absolute;
  right: 0.32rem;
  bottom: 6rem;
  transform-origin: center bottom;
}
.btn_box {
  width: 5.92rem;
  position: absolute;
  left: 50%;
  margin-left: -2.96rem;
  bottom: 2.61333rem;
}
.poiner {
  width: 0.88rem;
  position: absolute;
  right: -0.37333rem;
  top: 1.06667rem;
}
.btn_box {
  width: 5.92rem;
  position: absolute;
  left: 50%;
  margin-left: -2.96rem;
  bottom: 2.61333rem;
}
.mask {
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  position: fixed;
  left: 0;
  top: 0;
  display: none;
}
.mask img {
  width: 267px;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
</style>

接着引入api目录下抽奖的draw.js文件

function newFunction (parizelist, parize) {
// 页面设配,可以根据自己的方式适配
  !(function (N, M) { function L () { var a = I.getBoundingClientRect().width; a / F > 540 && (a = 540 * F); var d = a / 10; I.style.fontSize = d + 'px', D.rem = N.rem = d } var K; var J = N.document; var I = J.documentElement; var H = J.querySelector('meta[name="viewport"]'); var G = J.querySelector('meta[name="flexible"]'); var F = 0; var E = 0; var D = M.flexible || (M.flexible = {}); if (H) { var C = H.getAttribute('content').match(/initial\-scale=([\d\.]+)/); C && (E = parseFloat(C[1]), F = parseInt(1 / E)) } else { if (G) { var B = G.getAttribute('content'); if (B) { var A = B.match(/initial\-dpr=([\d\.]+)/); var z = B.match(/maximum\-dpr=([\d\.]+)/); A && (F = parseFloat(A[1]), E = parseFloat((1 / F).toFixed(2))), z && (F = parseFloat(z[1]), E = parseFloat((1 / F).toFixed(2))) } } } if (!F && !E) { var y = N.navigator.userAgent; var x = (!!y.match(/android/gi), !!y.match(/iphone/gi)); var w = x && !!y.match(/OS 9_3/); var v = N.devicePixelRatio; F = x && !w ? v >= 3 && (!F || F >= 3) ? 3 : v >= 2 && (!F || F >= 2) ? 2 : 1 : 1, E = 1 / F } if (I.setAttribute('data-dpr', F), !H) { if (H = J.createElement('meta'), H.setAttribute('name', 'viewport'), H.setAttribute('content', 'initial-scale=' + E + ', maximum-scale=' + E + ', minimum-scale=' + E + ', user-scalable=no'), I.firstElementChild) { I.firstElementChild.appendChild(H) } else { var u = J.createElement('div'); u.appendChild(H), J.write(u.innerHTML) } } N.addEventListener('resize', function () { clearTimeout(K), K = setTimeout(L, 300) }, !1), N.addEventListener('pageshow', function (b) { b.persisted && (clearTimeout(K), K = setTimeout(L, 300)) }, !1), J.readyState === 'complete' ? J.body.style.fontSize = 12 * F + 'px' : J.addEventListener('DOMContentLoaded', function () { J.body.style.fontSize = 12 * F + 'px' }, !1), L(), D.dpr = N.dpr = F, D.refreshRem = L, D.rem2px = function (d) { var c = parseFloat(d) * this.rem; return typeof d === 'string' && d.match(/rem$/) && (c += 'px'), c }, D.px2rem = function (d) { var c = parseFloat(d) / this.rem; return typeof d === 'string' && d.match(/px$/) && (c += 'rem'), c } }(window, window.lib || (window.lib = {})))
//抽奖
  $(function () {
    var prizeList = parizelist
    var the_hei = parseInt($('.rotate_btn').css('height'))
    var rotateDd = $('.rotate_box dd')
    var ddHei = rotateDd.height()
    rotateDd.css('backgroundSize', '100% ' + prizeList.length * ddHei + 'px')
    $('.rotate_btn').click(function () {
      var _this = $(this)
      if (!_this.hasClass('act')) {
        !_this.addClass('act')
        methods.star_animate.call(this)
        if (parize == '') {
         //让奖品随机滚动 不会中奖
          $('.rotate_box dd').rotate(methods.getRandom(parizelist.length))
        } else {
          // 中奖的奖品
          $('.rotate_box dd').rotate(methods.getDataIndex(parize))
        }
      }
    })

    $.fn.extend({
      rotate: function (num, callback) {
        var zjNum = num; console.log(zjNum); $(this).each(function (index) {
          var f = $(this); setTimeout(function () {
            f.animate({ backgroundPositionY: -(ddHei * prizeList.length * 5 + zjNum[index] * ddHei) }, {
              duration: 6000 + index * 1000,
              easing: 'easeInOutCirc',
              complete: function () {
                if (index === 2) { $('.rotate_btn').removeClass('act'); if (callback) { setTimeout(function () { callback() }, 1000) } }
                f.css('backgroundPositionY', -(zjNum[index] * ddHei))
              }
            })
          }, index * 1000)
        })
      }
    })
    var methods = {
      star_animate: function () { var _this = $(this); _this.animate({ height: the_hei / 2 }, 100, 'linear'); _this.animate({ height: the_hei }, 1000, 'easeOutBounce') },
      getRandom: function (num) {
        var arr = []; var _num = num; do { var val = Math.floor(Math.random() * num); if (arr.indexOf(val) < 0) { arr.push(val); _num-- } }
        while (_num > 0); return arr
      },
      getDataIndex: function (val) {
        var prizeMsg = val; var _index; var arr = []; for (var i = 0; i < prizeList.length; i++) { $.each(prizeList[i], function () { if (prizeList[i]['prizeid'] === prizeMsg['prizeid']) { _index = i } }) }
        for (var y = 0; y < 3; y++) { arr.push(_index) }
        return arr
      }
    }
  })
}

export default newFunction

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容