转盘抽奖活动代码
//抽奖转盘轮播图
(function () { $(function () { //抽奖转盘 //控制速度的函数 var moveStyle = { Linear: function (g, f, i, h) { return i * g / h + f }, Quad: { easeIn: function (g, f, i, h) { return i * (g /= h) * g + f }, easeOut: function (g, f, i, h) { return -i * (g /= h) * (g - 2) + f }, easeInOut: function (g, f, i, h) { if ((g /= h / 2) < 1) { return i / 2 * g * g + f } return -i / 2 * ((--g) * (g - 2) - 1) + f } }, Cubic: { easeIn: function (g, f, i, h) { return i * (g /= h) * g * g + f }, easeOut: function (g, f, i, h) { return i * ((g = g / h - 1) * g * g + 1) + f }, easeInOut: function (g, f, i, h) { if ((g /= h / 2) < 1) { return i / 2 * g * g * g + f } return i / 2 * ((g -= 2) * g * g + 2) + f } }, Quart: { easeIn: function (g, f, i, h) { return i * (g /= h) * g * g * g + f }, easeOut: function (g, f, i, h) { return -i * ((g = g / h - 1) * g * g * g - 1) + f }, easeInOut: function (g, f, i, h) { if ((g /= h / 2) < 1) { return i / 2 * g * g * g * g + f } return -i / 2 * ((g -= 2) * g * g * g - 2) + f } }, Quint: { easeIn: function (g, f, i, h) { return i * (g /= h) * g * g * g * g + f }, easeOut: function (g, f, i, h) { return i * ((g = g / h - 1) * g * g * g * g + 1) + f }, easeInOut: function (g, f, i, h) { if ((g /= h / 2) < 1) { return i / 2 * g * g * g * g * g + f } return i / 2 * ((g -= 2) * g * g * g * g + 2) + f } }, Sine: { easeIn: function (g, f, i, h) { return -i * Math.cos(g / h * (Math.PI / 2)) + i + f }, easeOut: function (g, f, i, h) { return i * Math.sin(g / h * (Math.PI / 2)) + f }, easeInOut: function (g, f, i, h) { return -i / 2 * (Math.cos(Math.PI * g / h) - 1) + f } }, Expo: { easeIn: function (g, f, i, h) { return (g == 0) ? f : i * Math.pow(2, 10 * (g / h - 1)) + f }, easeOut: function (g, f, i, h) { return (g == h) ? f + i : i * (-Math.pow(2, -10 * g / h) + 1) + f }, easeInOut: function (g, f, i, h) { if (g == 0) { return f } if (g == h) { return f + i } if ((g /= h / 2) < 1) { return i / 2 * Math.pow(2, 10 * (g - 1)) + f } return i / 2 * (-Math.pow(2, -10 * --g) + 2) + f } }, Circ: { easeIn: function (g, f, i, h) { return -i * (Math.sqrt(1 - (g /= h) * g) - 1) + f }, easeOut: function (g, f, i, h) { return i * Math.sqrt(1 - (g = g / h - 1) * g) + f }, easeInOut: function (g, f, i, h) { if ((g /= h / 2) < 1) { return -i / 2 * (Math.sqrt(1 - g * g) - 1) + f } return i / 2 * (Math.sqrt(1 - (g -= 2) * g) + 1) + f } }, Elastic: { easeIn: function (h, f, l, k, g, j) { if (h == 0) { return f } if ((h /= k) == 1) { return f + l } if (!j) { j = k * 0.3 } if (!g || g < Math.abs(l)) { g = l; var i = j / 4 } else { var i = j / (2 * Math.PI) * Math.asin(l / g) } return -(g * Math.pow(2, 10 * (h -= 1)) * Math.sin((h * k - i) * (2 * Math.PI) / j)) + f }, easeOut: function (h, f, l, k, g, j) { if (h == 0) { return f } if ((h /= k) == 1) { return f + l } if (!j) { j = k * 0.3 } if (!g || g < Math.abs(l)) { g = l; var i = j / 4 } else { var i = j / (2 * Math.PI) * Math.asin(l / g) } return (g * Math.pow(2, -10 * h) * Math.sin((h * k - i) * (2 * Math.PI) / j) + l + f) }, easeInOut: function (h, f, l, k, g, j) { if (h == 0) { return f } if ((h /= k / 2) == 2) { return f + l } if (!j) { j = k * (0.3 * 1.5) } if (!g || g < Math.abs(l)) { g = l; var i = j / 4 } else { var i = j / (2 * Math.PI) * Math.asin(l / g) } if (h < 1) { return -0.5 * (g * Math.pow(2, 10 * (h -= 1)) * Math.sin((h * k - i) * (2 * Math.PI) / j)) + f } return g * Math.pow(2, -10 * (h -= 1)) * Math.sin((h * k - i) * (2 * Math.PI) / j) * 0.5 + l + f } }, Back: { easeIn: function (g, f, j, i, h) { if (h == undefined) { h = 1.70158 } return j * (g /= i) * g * ((h + 1) * g - h) + f }, easeOut: function (g, f, j, i, h) { if (h == undefined) { h = 1.70158 } return j * ((g = g / i - 1) * g * ((h + 1) * g + h) + 1) + f }, easeInOut: function (g, f, j, i, h) { if (h == undefined) { h = 1.70158 } if ((g /= i / 2) < 1) { return j / 2 * (g * g * (((h *= (1.525)) + 1) * g - h)) + f } return j / 2 * ((g -= 2) * g * (((h *= (1.525)) + 1) * g + h) + 2) + f } }, Bounce: { easeIn: function (g, f, i, h) { return i - e.Bounce.easeOut(h - g, 0, i, h) + f }, easeOut: function (g, f, i, h) { if ((g /= h) < (1 / 2.75)) { return i * (7.5625 * g * g) + f } else { if (g < (2 / 2.75)) { return i * (7.5625 * (g -= (1.5 / 2.75)) * g + 0.75) + f } else { if (g < (2.5 / 2.75)) { return i * (7.5625 * (g -= (2.25 / 2.75)) * g + 0.9375) + f } else { return i * (7.5625 * (g -= (2.625 / 2.75)) * g + 0.984375) + f } } } }, easeInOut: function (g, f, i, h) { if (g < h / 2) { return e.Bounce.easeIn(g * 2, 0, i, h) * 0.5 + f } else { return e.Bounce.easeOut(g * 2 - h, 0, i, h) * 0.5 + i * 0.5 + f } } } }; function dragonBoatFestival() { this.init() } $.extend(dragonBoatFestival.prototype, { init: function () { var self = this; this.curDeg = 0; this.awards = { "1": { idx: 1, level: 4, name: "20元手机话费" }, "2": { idx: 3, level: 2, name: "10元红包" }, "3": { idx: 5, level: 1, name: "三元提现券" }, "4": { idx: 7, level: 3, name: "10元手机话费" }, "5": { idx: 9, level: 5, name: "充电宝" }, "6": [ { idx: 0, level: 10, name: "谢谢参与" }, { idx: 2, level: 10, name: "谢谢参与" }, { idx: 4, level: 10, name: "谢谢参与" }, { idx: 6, level: 10, name: "谢谢参与" }, { idx: 8, level: 10, name: "谢谢参与" } ] }; self.use(); }, use: function () { self.Move(self.getAwardSector(5), function () { //可写显示获奖弹框的回调函数 }); //level值 5为充电宝 }, isSupportTransform: function(k) { var m = new Array("transform", "MozTransform", "webkitTransform", "OTransform", "msTransform"); var h = null; var p = k.get(0); var n = p.style; for (var j = 0, g = m.length; j < g; j++) { if (m[j] in n) { h = m[j]; break } } return h }, setTransform: function(q, t) { var self = this; var $btn = self.$btn; var p = true; var i = q[0]; var j = null; var w = Math.PI / 180; var r = t * w; var h = Math.sin(r), g = Math.cos(r); /*var s = self.$pointer[0].getBoundingClientRect(); var n = (s.right - s.left) / 2, l = (s.bottom - s.top) / 2;*/ var s ; var n = 160, l = 160; var m = 0, k = 0; j = self.isSupportTransform(q); p = !j ? true : false; if (!p) { i.style[j] = "rotate(" + t + "deg)" } else { if ( i.filters.length > 0 && i.filters.item(0).M11 ) { i.filters.item(0).M11 = g; i.filters.item(0).M12 = -h; i.filters.item(0).M21 = h; i.filters.item(0).M22 = g; } else { i.style.filter += "progid:DXImageTransform.Microsoft.Matrix(M11=" + g + ", M12=" + -h + ", M21=" + h + ", M22=" + g + ', sizingMethod="auto expand")'; } s = i.getBoundingClientRect(); m = (s.right - s.left) / 2; k = (s.bottom - s.top) / 2; i.style.marginLeft = n - m + "px"; i.style.marginTop = l - k + "px"; $btn[0].style.marginLeft = m - n + "px"; $btn[0].style.marginTop = k - l+ "px" } }, Move: function (p, calBack) { var self = this; var r = 0, n = deg = self.curDeg, m = 0, l = 635; var k = p, q = 10; m = 360 * q + k - n; var g = "Quint"; var u = "easeInOut"; clearTimeout(self.timderID); function j() { if (r < l) { r++; deg = Math.ceil(moveStyle[g][u](r, n, m, l)); self.setTransform(self.$pointerCon, deg); self.timderID = setTimeout(j, 10) } else { deg = m + n; self.setTransform(self.$pointerCon, deg); self.curDeg = deg % 360; if ($.isFunction(calBack)) { setTimeout(function () { calBack(self) }, 1000) } } } j(); }, //根据请求返回的level来决定最后指针指向 getAwardSector: function (level) { var self = this; var g = -1; var j = 0; var i = Math.round(Math.random() * 10); $.each(self.awards, function (i, item) { if ($.isArray(item)) { var ranNum = Math.floor(Math.random() * 2); if (item[ranNum].level == level) { g = item[ranNum].idx; } } else { if (item.level == level) { g = item.idx } } }); if (g == -1) { var k = function (m) { var n = true; $.each(self.awards, function (i, item) { if ($.isArray(item)) { var ranNum = Math.floor(Math.random() * 2); if (item[ranNum].level == level) { n = false; } } else { if (item.level == level) { n = false; } } }); return n; }; do { i = Math.round(Math.random() * 10) % 10 } while (!k(i)); g = self.awards["6"][Math.floor(Math.random() * 2)].idx; } j = g * 36; return j; } }); new dragonBoatFestival() }) })(jQuery);