前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大转盘设置漂浮物

大转盘设置漂浮物

作者头像
lyudev
发布2022-08-04 10:53:14
2.1K0
发布2022-08-04 10:53:14
举报
文章被收录于专栏:代码即数据

大转盘.jpg

选择漂浮物.jpg

代码语言:javascript
复制
<!--大转盘-->
<div class="shareLeft">
    <div class="sharePosition">
        <div class="shareBigTitle">
            幸运大转盘
        </div>
    </div>
    <div class="shareBg">
    </div>
    <div class="shareInside">
        <div class="moneybox" id="leafContainer"></div>
        <div class="shareBgTitle"><img src="../img/lottery1.png"></div>
        <div class="turntable">
            <div class="bg"></div>
            <div class="content1">
                <img src="http://cdn.choujiangle.cn/images/prize/default/gift.png" id="fen-img" style="display:none;">
                <img src="http://cdn.choujiangle.cn/images/prize/default/red-packet.png" id="zuliao-img" style="display:none;">
                <img src="http://cdn.choujiangle.cn/images/prize/default/yuanbao2.png" id="baowen-img" style="display:none;">
                <img src="http://cdn.choujiangle.cn/images/prize/default/yuanbao.png" id="yundou-img" style="display:none;">
                <img src="http://cdn.choujiangle.cn/images/prize/default/yuanbao2.png" id="ganlan-img" style="display:none;">
                <img src="http://cdn.choujiangle.cn/images/prize/default/yuanbao3.png" id="yusan-img" style="display:none;">
                <div class="banner">
                    <div class="turnplate">
                        <canvas class="item" id="wheelcanvas" width="422px" height="422px"></canvas>
                        <img class="pointer" src="../img/button.png">
                    </div>
                </div>
            </div>
        </div>
        <div class="chance">
            您还有<span> 1 </span>次机会
        </div>
        <div class="countDownDiv">
            <div class="countDown" id="countDown">
                活动<span class="mainColor">结束</span>倒计时 <span><span class="bg-color">0</span> 天 <span class="bg-color">0</span> 时 <span class="bg-color">0</span> 分 <span class="bg-color">0</span> 秒</span>
            </div>
        </div>
        <div class="activityRulesDiv">
            <div class="activityRules">
                活动规则
            </div>
            <div class="activityRulesText">
                <p><span>活动规则文字</span><img src="../img/message.jpg" style="max-width: 100%;"></p>
            </div>
        </div>
    </div>
    <div class="copyRight">
        提供技术支持
    </div>
</div>
<!--设置漂浮物-->
<div class="settingRow">
    <div class="title1">
        <span>漂浮物</span>
    </div>
    <div class="settingRowRight">
        <div class="settingRadioDiv">
            <div class="settingRadioList settingRadioList2">
                <input type="radio" name='flotageOn' id="flotageOn" checked value="0">
                <label for="flotageOn">开启</label>
            </div>
            <div class="settingRadioList settingRadioList2">
                <input type="radio" name='flotageOn' id="flotageOff" value="1">
                <label for="flotageOff">关闭</label>
            </div>
        </div>
        <div class="flotageDiv">
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/huangguan.png" class="el-tooltip item" aria-describedby="el-tooltip-72" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/xin.png" class="el-tooltip item" aria-describedby="el-tooltip-2729" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/xuehua.png" class="el-tooltip item" aria-describedby="el-tooltip-7932" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/jinbi.png" class="el-tooltip item" aria-describedby="el-tooltip-3654" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/hongbao.png" class="el-tooltip item" aria-describedby="el-tooltip-4565" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/jiangbei.png" class="el-tooltip item" aria-describedby="el-tooltip-7373" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/denglong.png" class="el-tooltip item" aria-describedby="el-tooltip-7653" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/yuanbao.png" class="el-tooltip item" aria-describedby="el-tooltip-6615" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/aixin.png" class="el-tooltip item" aria-describedby="el-tooltip-2199" tabindex="0"></div>
            <div class="decorate"><img src="//cdn.choujiangle.cn/decorate/denglong2.png" class="el-tooltip item" aria-describedby="el-tooltip-8904" tabindex="0"></div>
        </div>
    </div>
</div>


代码语言:javascript
复制
/**大转盘开始**/
.shareInside {
  overflow: hidden;
  overflow-y: auto;
  height: 513px;
  bottom: 103px;
  left: 26px;
  position: absolute;
  width: 320px;
}
.shareBigTitle {
  position: absolute;
  left: 50%;
  top: 108px;
  transform: translate(-50%, -50%);
  font-size: 16px;
}

.shareContainer {
  display: flex;
  justify-content: space-between;
}
.shareLeft {
  width: 372px;
  height: 744px;
  background: url(../img/phone_bg.png) no-repeat;
  position: relative;
  margin: 30px auto;
}
.sharePosition {
  width: 100%;
  text-align: center;
  font-size: 18px;
}

.shareBg {
  position: absolute;
  top: 128px;
  width: 320px;
  background: url(../img/dzp1-bg.png) no-repeat;
  background-size: 100% 100%;
  bottom: 103px;
  left: 26px;
}

.shareBgTitle {
  text-align: center;
}
.shareBgTitle img {
  width: 75%;
  margin-top: 25px;
}
.turntable {
  width: 252px;
  height: 252px;
  margin: -20px auto 0;
}
.turntable .zhuanpan {
  -webkit-transition: -webkit-transform 6s ease;
  transition: -webkit-transform 6s ease;
  transition: transform 6s ease;
  transition: transform 6s ease, -webkit-transform 6s ease;
  -webkit-transition: transform 6s ease;
}
@-webkit-keyframes xuanzhuan {
  from {
    -webkit-transform: rotate(0turn);
    transform: rotate(0turn);
    -webkit-transition: rotate(0turn);
  }
  to {
    -webkit-transform: rotate(1turn);
    transform: rotate(1turn);
    -webkit-transition: rotate(1turn);
  }
}
@keyframes xuanzhuan {
  from {
    -webkit-transform: rotate(0turn);
    transform: rotate(0turn);
    -webkit-transition: rotate(0turn);
  }
  to {
    -webkit-transform: rotate(1turn);
    transform: rotate(1turn);
    -webkit-transition: rotate(1turn);
  }
}
.turntable .bg {
  width: 100%;
  height: 100%;
  background: url(../img/turntable-outer-bg2.png) no-repeat;
  background-size: cover;
  -webkit-animation: xuanzhuan 5s linear infinite;
  animation: xuanzhuan 5s linear infinite;
  margin-top: 41px;
}
.banner {
  width: 240px;
  height: 240px;
  position: absolute;
  left: 50%;
  top: 238px;
  overflow: hidden;
  transform: translate(-50%, -50%);
}
.banner .turnplate {
  display: block;
  width: 100%;
  position: relative;
}
.banner .turnplate canvas.item {
  width: 100%;
}
.banner .turnplate img.pointer {
  position: absolute;
  width: 56px;
  left: 50%;
  top: 47%;
  transform: translate(-50%, -50%);
}
#sbtn {
  position: absolute;
  top: 85%;
  text-align: center;
  width: 100%;
}
#sbtn img {
  width: 24%;
  margin: 0 20px;
}
.content1 {
  width: 0px;
  height: 0px;
}

.chance {
  margin: 10px auto 0px;
  color: #fff;
  width: 157px;
  text-align: center;
  font-size: 14px;
  background-color: #fea603;
  border-radius: 1rem;
  height: 26px;
  line-height: 26px;
  letter-spacing: 0.05rem;
}
.countDownDiv {
  overflow: hidden;
  margin: 10px auto;
  width: 278px;
  height: 48px;
}
.countDown {
  height: 47px;
  line-height: 47px;
  background-color: #fff;
  margin: 0 auto;
  text-align: center;
  border-radius: 5px;
  color: #5d6a73;
  font-size: 12px;
}
.countDown .mainColor {
  color: #fa3d3e;
}
.bg-color {
  background-color: #fa3d3e;
  color: #fff;
  border-radius: 3px;
  padding: 2px 5px;
}
.copyRight {
  height: 26px;
  line-height: 26px;
  text-align: center;
  color: #999;
  background: #f9f9f9;
  position: absolute;
  width: calc(100% - 52px);
  background-size: 100% 100%;
  bottom: 103px;
  left: 26px;
  font-size: 12px;
}
.shareBtn {
  display: flex;
  justify-content: center;
}
.activityRulesDiv {
  margin: 40px auto 40px;
  font-size:14px;
  border: 3px solid #ffff96;
  background-color: #fff;
  width: 246px;
  border-radius:3px;
}
.activityRules {
  background: url(../img/activityRulesBg.png) no-repeat;
  background-size: 100% 100%;
  text-align: center;
  width: 60%;
  height: 30px;
  margin: -20px auto 0;
}
.activityRulesText {
  padding: 10px 5px;
}
#leafContainer {
    position: absolute;
    width: 100%;
  height: calc(100% - 26px);
  overflow: hidden;
}

#leafContainer > div {
    position: absolute;
    width:20px;
  height: 20px;
  z-index: 999;
    -webkit-animation-iteration-count: infinite, infinite;
    -webkit-animation-direction: normal, normal;
    -webkit-animation-timing-function: linear, ease-in;
}
#leafContainer > div > img {
    position: absolute;
    width: 20px;
    height: 20px;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: alternate;
    -webkit-animation-timing-function: ease-in-out;
    -webkit-transform-origin: 50% -100%;
}
@-webkit-keyframes fade {
 0% {
opacity: 1;
}
 95% {
opacity: 1;
}
 100% {
opacity: 0;
}
}
@-webkit-keyframes drop {
 0% {
-webkit-transform: translate(0px, -50px);
}
 100% {
-webkit-transform: translate(0px, 650px);
}
}
@-webkit-keyframes clockwiseSpin {
 0% {
-webkit-transform: rotate(-50deg);
}
 100% {
-webkit-transform: rotate(50deg);
}
}
@-webkit-keyframes counterclockwiseSpinAndFlip {
 0% {
-webkit-transform: scale(-1, 1) rotate(50deg);
}
 100% {
-webkit-transform: scale(-1, 1) rotate(-50deg);
}
}
/**大转盘结束**/
.settingRow {
  display: flex;
  align-items: baseline;
  align-content: center;
  justify-content: flex-start;
  margin-bottom: 10px;
}
.settingRowRight {
  width: 719px;
}
.title1 {
  width: 120px;
  margin: 0px !important;
  font-size: 14px;
  color: #333;
  line-height: 30px;
}
.settingRadioDiv {
  display: flex;
  align-items: center;
  margin: 10px 0;
  width: 100%;
  height: 20px;
  line-height: 20px;
}
.settingRadioList {
  display: flex;
  align-items: center;
  margin: 0px 20px 0px 0px;
}
.flotageDiv {
  height: 110px;
  background: #ffffff;
  border: 1px solid #e3e4e9;
  overflow: hidden;
}
 .decorate {
  float:left;
  cursor: pointer;
  padding: 5px;
  margin-bottom: 3px;
}
.decorate:hover{
  background-color: #DCEFFB;
  border-radius: 2px;
}
.decorate img {
  width: 24px;
  height: 24px;
  border:none;
}
代码语言:javascript
复制
//大转盘活动
var turnplate = {
    restaraunts: [],                //大转盘奖品名称
    colors: [],                 //大转盘奖品区块对应背景颜色
    outsideRadius: 192,         //大转盘外圆的半径
    textRadius: 155,                //大转盘奖品位置距离圆心的距离
    insideRadius: 30,           //大转盘内圆的半径
    startAngle: 0,              //开始角度
    bRotate: false              //false:停止;ture:旋转
};
$(document).ready(function () {
    //动态添加大转盘的奖品与奖品区域背景颜色
    turnplate.restaraunts = ["20积分", "足疗机", "20积分", "保温杯", "20积分", "电熨斗", "20积分 ", "橄榄油", "20积分"];
    turnplate.colors = ["#d7d7d7", "#fef43e", "#ef7683", "#d7d7d7", "#fef43e", "#ef7683", "#d7d7d7", "#fef43e", "#ef7683",];
    var rotateTimeOut = function () {
        $('#wheelcanvas').rotate({
            angle: 0,
            animateTo: 2160,
            duration: 8000,
            callback: function () {
                alert('网络超时,请检查您的网络设置!');
            }
        });
    };
    //旋转转盘 item:奖品位置; txt:提示语;
    var rotateFn = function (item, txt) {
        var angles = item * (360 / turnplate.restaraunts.length) - (360 / (turnplate.restaraunts.length * 2));
        if (angles < 270) {
            angles = 270 - angles;
        } else {
            angles = 360 - angles + 270;
        }
        $('#wheelcanvas').stopRotate();
        $('#wheelcanvas').rotate({
            angle: 0,
            animateTo: angles + 1800,
            duration: 8000,
            callback: function () {
                //中奖提示
                alert(txt);
                turnplate.bRotate = !turnplate.bRotate;
            }
        });
    };
    $('.pointer').click(function () {
        if (turnplate.bRotate) return;
        turnplate.bRotate = !turnplate.bRotate;
        //获取随机数(奖品个数范围内)
        var item = rnd(1, turnplate.restaraunts.length);
        //奖品数量等于10,指针落在对应奖品区域的中心角度[252, 216, 180, 144, 108, 72, 36, 360, 324, 288]
        rotateFn(item, turnplate.restaraunts[item - 1]);
    });
});
function rnd(n, m) {
    n = 1;//最小随机数
    m = 100;//最大随机数(概率范围最大值)
    //最大数数不超过最大随机数
    var ransluck = [50, 60, 65, 70, 75, 80, 85, 90, 95, 100];//概率为比自己小的第一个数之间的差
    var randoms = Math.floor(Math.random() * (m - n + 1) + n);
    if (randoms <= ransluck[0]) {
        var random = 1;
    }
    else if (randoms <= ransluck[1]) {
        var random = 2;
    }
    else if (randoms <= ransluck[2]) {
        var random = 3;
    }
    else if (randoms <= ransluck[3]) {
        var random = 4;
    }
    else if (randoms <= ransluck[4]) {
        var random = 5;
    }
    else if (randoms <= ransluck[5]) {
        var random = 6;
    }
    else if (randoms <= ransluck[6]) {
        var random = 7;
    }
    else if (randoms <= ransluck[7]) {
        var random = 8;
    }
    else if (randoms <= ransluck[8]) {
        var random = 9;
    }
    else if (randoms <= ransluck[9]) {
        var random = 10;
    }
    return random;

}
//页面所有元素加载完毕后执行drawRouletteWheel()方法对转盘进行渲染
window.onload = function () {
    drawRouletteWheel();
};
function drawRouletteWheel() {
    var canvas = document.getElementById("wheelcanvas");
    if (canvas.getContext) {
        //根据奖品个数计算圆周角度
        var arc = Math.PI / (turnplate.restaraunts.length / 2);
        var ctx = canvas.getContext("2d");
        //在给定矩形内清空一个矩形
        ctx.clearRect(0, 0, 422, 422);
        //strokeStyle 属性设置或返回用于笔触的颜色、渐变或模式
        ctx.strokeStyle = "#FFBE04";
        //font 属性设置或返回画布上文本内容的当前字体属性
        ctx.font = '20px Microsoft YaHei';
        for (var i = 0; i < turnplate.restaraunts.length; i++) {
            var angle = turnplate.startAngle + i * arc;
            ctx.fillStyle = turnplate.colors[i];
            ctx.beginPath();
            //arc(x,y,r,起始角,结束角,绘制方向) 方法创建弧/曲线(用于创建圆或部分圆)
            ctx.arc(211, 211, turnplate.outsideRadius, angle, angle + arc, false);
            ctx.arc(211, 211, turnplate.insideRadius, angle + arc, angle, true);
            ctx.stroke();
            ctx.fill();
            //锁画布(为了保存之前的画布状态)
            ctx.save();
            //----绘制奖品开始----
            ctx.fillStyle = "#000";
            var text = turnplate.restaraunts[i];
            var line_height = 17;
            //translate方法重新映射画布上的 (0,0) 位置
            ctx.translate(211 + Math.cos(angle + arc / 2) * turnplate.textRadius, 211 + Math.sin(angle + arc / 2) * turnplate.textRadius);
            //rotate方法旋转当前的绘图
            ctx.rotate(angle + arc / 2 + Math.PI / 2);
            /** 下面代码根据奖品类型、奖品名称长度渲染不同效果,如字体、颜色、图片效果。(具体根据实际情况改变) **/
            if (text.indexOf("M") > 0) {//流量包
                var texts = text.split("M");
                for (var j = 0; j < texts.length; j++) {
                    ctx.font = j == 0 ? 'bold 12px Microsoft YaHei' : '16px Microsoft YaHei';
                    if (j == 0) {
                        ctx.fillText(texts[j] + "M", -ctx.measureText(texts[j] + "M").width / 2, j * line_height);
                    } else {
                        ctx.fillText(texts[j], -ctx.measureText(texts[j]).width / 2, j * line_height);
                    }
                }
            } else if (text.indexOf("M") == -1 && text.length > 6) {//奖品名称长度超过一定范围
                text = text.substring(0, 6) + "||" + text.substring(6);
                var texts = text.split("||");
                for (var j = 0; j < texts.length; j++) {
                    ctx.fillText(texts[j], -ctx.measureText(texts[j]).width / 2, j * line_height);
                }
            } else {
                //在画布上绘制填色的文本。文本的默认颜色是黑色
                //measureText()方法返回包含一个对象,该对象包含以像素计的指定字体宽度
                ctx.fillText(text, -ctx.measureText(text).width / 2, 0);
            }
            //添加对应图标
            if (text.indexOf("分") > 0) {
                var img = document.getElementById("fen-img");
                img.onload = function () {
                    ctx.drawImage(img, -18, 25, 36, 36);
                };
                ctx.drawImage(img, -18, 25, 36, 36);
            } else if (text.indexOf("足疗") >= 0) {
                var img = document.getElementById("zuliao-img");
                img.onload = function () {
                    ctx.drawImage(img, -18, 25, 36, 36);
                };
                ctx.drawImage(img, -18, 25, 36, 36);
            }
            else if (text.indexOf("保温") >= 0) {
                var img = document.getElementById("baowen-img");
                img.onload = function () {
                    ctx.drawImage(img, -18, 25, 36, 36);
                };
                ctx.drawImage(img, -18, 25, 36, 36);
            }
            else if (text.indexOf("电熨斗") >= 0) {
                var img = document.getElementById("yundou-img");
                img.onload = function () {
                    ctx.drawImage(img, -18, 25, 36, 36);
                };
                ctx.drawImage(img, -18, 25, 36, 36);
            }
            else if (text.indexOf("橄榄") >= 0) {
                var img = document.getElementById("ganlan-img");
                img.onload = function () {
                    ctx.drawImage(img, -18, 25, 36, 36);
                };
                ctx.drawImage(img, -18, 25, 36, 36);
            }
            else if (text.indexOf("雨伞") >= 0) {
                var img = document.getElementById("yusan-img");
                img.onload = function () {
                    ctx.drawImage(img, -18, 25, 36, 36);
                };
                ctx.drawImage(img, -18, 25, 36, 36);
            }

            //把当前画布返回(调整)到上一个save()状态之前
            ctx.restore();
            //----绘制奖品结束----
        }
    }
}
//大转盘倒计时
const fourthOfJuly = new Date("July 4, 2021 12:00:00").getTime();
let timer = setInterval(function () {
    const today = new Date().getTime();
    const diff = fourthOfJuly - today;
    let days = Math.floor(diff / (1000 * 60 * 60 * 24));
    let hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    let minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
    let seconds = Math.floor((diff % (1000 * 60)) / 1000);
    document.getElementById("countDown").innerHTML = ' 活动<span class="mainColor">结束</span>倒计时 <span><span class="bg-color">' + days + '</span> 天 <span class="bg-color">' + hours + '</span> 时 <span class="bg-color">' + minutes + '</span> 分 <span class="bg-color">' + seconds + '</span> 秒</span></div>'
}, 1000);
//漂浮物
const NUMBER_OF_LEAVES = 80;
const width = window.screen.width;
function randomInteger(low, high) {
    return low + Math.floor(Math.random() * (high - low));
}
function randomFloat(low, high) {
    return low + Math.random() * (high - low);
}
function pixelValue(value) {
    return value + 'px';
}

function durationValue(value) {
    return value + 's';
}
function createALeaf() {
    var leafDiv = document.createElement('div');
    var image = document.createElement('img');
    image.src = '//cdn.choujiangle.cn/decorate/huangguan.png';
    image.src = '';
    leafDiv.style.top = "-100px";
    leafDiv.style.left = pixelValue(randomInteger(0, width));
    var spinAnimationName = (Math.random() < 0.5) ? 'clockwiseSpin' : 'counterclockwiseSpinAndFlip';
    leafDiv.style.webkitAnimationName = 'fade, drop';
    image.style.webkitAnimationName = spinAnimationName;
    image.className = 'mask';
    var fadeAndDropDuration = durationValue(randomFloat(3, 9));
    var spinDuration = durationValue(randomFloat(3, 7));
    leafDiv.style.webkitAnimationDuration = fadeAndDropDuration + ', ' + fadeAndDropDuration;
    var leafDelay = durationValue(randomFloat(0, 0));
    leafDiv.style.webkitAnimationDelay = leafDelay + ', ' + leafDelay;
    image.style.webkitAnimationDuration = spinDuration;
    leafDiv.appendChild(image);
    leafDiv.className = "maskDiv";
    return leafDiv;
}
function strat() {
    var container = document.getElementById('leafContainer');
    for (var i = 0; i < NUMBER_OF_LEAVES; i++) {
        container.appendChild(createALeaf());
    }
}
$("body").on("click", ".decorate img", function () {
    var radioVal = $("input[name='flotageOn']:checked").val()
    if (radioVal == 0) {
        strat()
        $(".mask").attr("src", $(this).prop("src"))
    }
})
$(':radio[name="flotageOn"]').on('click', function () {
    if ($(this).val() == 1) {
        $(".maskDiv").css("display", 'none')
    }
})
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码即数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档