javascript 抽獎


模擬抽獎的實現過程
旋轉原理:當支持CSS3屬性采用transform: rotate(角度deg)設置,當角度為正數時順時針旋轉,當為負數時逆時針旋轉。如果是IE8及其以下,采用采用絕對定位設置top和left,模擬角度旋轉。
run方法,參數angle指角度

             function run(angle) {
                    if (isIE) {
                        cosDeg = Math.cos(angle * Math.PI / 180);
                        sinDeg = Math.sin(angle * Math.PI / 180);
                        with (target.filters.item(0)) {
                            M11 = M22 = cosDeg; M12 = -(M21 = sinDeg);
                        }
                        target.style.top = (orginH - target.offsetHeight) / 2 + "px";
                        target.style.left = (orginW - target.offsetWidth) / 2 + "px";
                    } else if (target.style.MozTransform !== undefined) {
                        target.style.MozTransform = "rotate(" + angle + "deg)";
                    } else if (target.style.OTransform !== undefined) {
                        target.style.OTransform = "rotate(" + angle + "deg)";
                    } else if (target.style.webkitTransform !== undefined) {
                        target.style.webkitTransform = "rotate(" + angle + "deg)";
                    } else {
                        target.style.transform = "rotate(" + angle + "deg)";
                    }
                }


模擬轉盤加速,勻速和減速。當角度小於某個數值時,讓其處於加速此處采用1.01的系數作為加速度,當大於某個數值時處於高速勻速狀態,當角度大於設置的最大數值時,讓其減速采用系數為0.99。設置負數作為減速的值(即變量 tmp),隨即獲取負360中的值(即變量 m),當大於這個值時,轉盤停止。

                var tmp = -900;
                var m = -parseInt(Math.random() * 360);
                timer = setInterval(function () {
                    if (i > 3000) {
                        tmp = parseInt(tmp * 0.99);
                        if (tmp > m) {
                            tmp = m;
                            clearInterval(timer);
                            msg(m);
                        }
                        run(tmp);
                    }
                    else if (i > 1000) {
                        i = i + 45;
                        run(i);
                    }
                    else {
                        i = parseInt((i + 1) * 1.01);
                        run(i);
                    }
                }, 50);

啟動抽獎和重新設置抽獎

    <input id="test" type="button" value="抽獎" />
    <input id="restart" style="display: none;" type="button" value="再抽一次" />
            m$('test').onclick = function () {
                m$('test').style.display = "none";
                showMsg();
            }

            m$('restart').onclick = function () {
                m$('restart').style.display = "none";

                if (isIE) {
                    m$("demo").style.top = "0px";
                    m$("demo").style.left = "0px";
                } else if (m$("demo").style.MozTransform !== undefined) {
                    m$("demo").style.MozTransform = 'rotate(0deg)';
                } else if (m$("demo").style.OTransform !== undefined) {
                    m$("demo").style.OTransform = 'rotate(0deg)';

                } else if (m$("demo").style.webkitTransform !== undefined) {
                    m$("demo").style.webkitTransform = 'rotate(0deg)';
                } else {
                    m$("demo").style.transform = 'rotate(0deg)';
                }

                m$('test').style.display = "block";
                i = 0;
            }

參考示例:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM