jquery实现转盘抽奖功能

现在我来向你讲解"jquery实现转盘抽奖功能"的具体实现步骤,你可以按照下面的流程来操作。

1. 引入JQuery库

首先在HTML中引入JQuery库,以便调用其方法。

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

2. 编写HTML结构

定义一个转盘的HTML结构,具体可以按照自己的需求来设计样式和内容。

<div class="turntable">
    <div class="turntable-bg"></div>
    <div class="turntable-pointer"></div>
    <ul class="turntable-list">
        <li>
            <span>1</span>
        </li>
        <li>
            <span>2</span>
        </li>
        <li>
            <span>3</span>
        </li>
        <li>
            <span>4</span>
        </li>
        <li>
            <span>5</span>
        </li>
        <li>
            <span>6</span>
        </li>
    </ul>
</div>

3. CSS样式设计

为转盘设置样式,包括背景、指针、列表等样式。

.turntable {
    position: relative;
    width: 350px;
    height: 350px;
    margin: 0 auto;
    border-radius: 50%;
    overflow: hidden;
}

.turntable-bg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-image: url('bg.jpg');
    background-size: 100% 100%;
}

.turntable-pointer {
    position: absolute;
    top: 0;
    left: 0;
    width: 75%;
    height: 75%;
    background-image: url('pointer.png');
    background-size: 100% 100%;
    background-repeat: no-repeat;
    background-position: center center;
    transform-origin: left center;
    transform: rotate(0deg);
    transition: transform 6s ease-out;
}

.turntable-list {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 75%;
    height: 75%;
    margin: -37.5% 0 0 -37.5%;
    list-style: none;
    transform-origin: center center;
}

.turntable-list li {
    position: absolute;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    background-color: rgba(0,0,0,.7);
    transform-origin: center center;
    display: flex;
    justify-content: center;
    align-items: center;
    color: #fff;
    z-index: 100;
    pointer-events: none;
}

.turntable-list li span {
    font-size: 48px;
}

4. JS代码实现转盘旋转抽奖

在JS代码中,我们需要设置一个很大的数组,来模拟每个奖品所对应的位置和概率,并且需要基于该数组计算每个奖品所对应的角度。然后定义一个变量来储存旋转角度,并基于该变量能达到的最终角度来设置旋转动画。

$(function(){
    var $pointer = $('.turntable-pointer');
    var $turntable = $('.turntable');
    var $tickets = [0,1,2,3,4,5];
    var $angles = [
        {
            angle: [0, 45],
            text: '奖品1',
            color: '#fe6863'
        },
        {
            angle: [315, 360],
            text: '奖品2',
            color: '#86c1fd'
        },
        {
            angle: [225, 270],
            text: '奖品3',
            color: '#fcb047'
        },
        {
            angle: [135, 180],
            text: '奖品4',
            color: '#fe6863'
        },
        {
            angle: [270, 315],
            text: '奖品5',
            color: '#ff9c43'
        },
        {
            angle: [45, 90],
            text: '奖品6',
            color: '#86c1fd'
        },
    ];
    var $isRotating = false;
    var $result = 1;
    $pointer.click(function(){
        if($isRotating){
            return;
        }else{
            $isRotating = true;
            var $speed = Math.floor(Math.random()*3 + 2)*1000;
            $result = Math.floor(Math.random() * $tickets.length);
            var $angle = 360 / ($tickets.length) * $result;
            $angle += 360 * 6;
            $pointer.css({
                'transform': 'rotate(' + $angle + 'deg)',
                'transition': 'transform ' + $speed + 'ms cubic-bezier(.68,-0.55,.27,1.55)'
            });
            setTimeout(function(){
                alert('恭喜你抽中:' + $angles[$result].text);
                $isRotating = false;
            },$speed);
        }
    });
});

示例说明

示例一

我们假设现在有一个转盘,其中包含了六个选项,我们使用JS来随机生成这些选项的概率,并在点击时转动转盘。下面是代码演示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery实现转盘抽奖</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <style>
        .turntable {
            position: relative;
            width: 350px;
            height: 350px;
            margin: 0 auto;
            border-radius: 50%;
            overflow: hidden;
        }

        .turntable-bg {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-image: url('bg.jpg');
            background-size: 100% 100%;
        }

        .turntable-pointer {
            position: absolute;
            top: 0;
            left: 0;
            width: 75%;
            height: 75%;
            background-image: url('pointer.png');
            background-size: 100% 100%;
            background-repeat: no-repeat;
            background-position: center center;
            transform-origin: left center;
            transform: rotate(0deg);
            transition: transform 6s ease-out;
        }

        .turntable-list {
            position: absolute;
            top: 50%;
            left: 50%;
            width: 75%;
            height: 75%;
            margin: -37.5% 0 0 -37.5%;
            list-style: none;
            transform-origin: center center;
        }

        .turntable-list li {
            position: absolute;
            width: 100%;
            height: 100%;
            border-radius: 50%;
            background-color: rgba(0,0,0,.7);
            transform-origin: center center;
            display: flex;
            justify-content: center;
            align-items: center;
            color: #fff;
            z-index: 100;
            pointer-events: none;
        }

        .turntable-list li span {
            font-size: 48px;
        }
    </style>
</head>
<body>
<div class="turntable">
    <div class="turntable-bg"></div>
    <div class="turntable-pointer"></div>
    <ul class="turntable-list">
        <li>
            <span>1</span>
        </li>
        <li>
            <span>2</span>
        </li>
        <li>
            <span>3</span>
        </li>
        <li>
            <span>4</span>
        </li>
        <li>
            <span>5</span>
        </li>
        <li>
            <span>6</span>
        </li>
    </ul>
</div>
<script>
    $(function(){
        var $pointer = $('.turntable-pointer');
        var $turntable = $('.turntable');
        var $tickets = [0,1,2,3,4,5];
        var $angles = [
            {
                angle: [0, 45],
                text: '奖品1',
                color: '#fe6863'
            },
            {
                angle: [315, 360],
                text: '奖品2',
                color: '#86c1fd'
            },
            {
                angle: [225, 270],
                text: '奖品3',
                color: '#fcb047'
            },
            {
                angle: [135, 180],
                text: '奖品4',
                color: '#fe6863'
            },
            {
                angle: [270, 315],
                text: '奖品5',
                color: '#ff9c43'
            },
            {
                angle: [45, 90],
                text: '奖品6',
                color: '#86c1fd'
            },
        ];
        var $isRotating = false;
        var $result = 1;
        $pointer.click(function(){
            if($isRotating){
                return;
            }else{
                $isRotating = true;
                var $speed = Math.floor(Math.random()*3 + 2)*1000;
                $result = Math.floor(Math.random() * $tickets.length);
                var $angle = 360 / ($tickets.length) * $result;
                $angle += 360 * 6;
                $pointer.css({
                    'transform': 'rotate(' + $angle + 'deg)',
                    'transition': 'transform ' + $speed + 'ms cubic-bezier(.68,-0.55,.27,1.55)'
                });
                setTimeout(function(){
                    alert('恭喜你抽中:' + $angles[$result].text);
                    $isRotating = false;
                },$speed);
            }
        });
    });
</script>
</body>
</html>

示例二

我们将上述函数封装成jQuery插件形式,并添加了一些配置项供自定义调用,如指针样式、转盘样式、转盘上文字等。下面是代码演示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery转盘抽奖插件</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<script>
    (function($){
        $.fn.turntable=function(option){
            var opts = $.extend({}, $.fn.turntable.defaults, option);
            var $pointer = $(this).find('.turntable-pointer');
            var $turntable = $(this).find('.turntable');
            var $tickets = Array.apply(null, {length: opts.items}).map(Number.call, Number);
            var $angles = opts.angles;
            var $isRotating = false;
            var $result = 1;
            $pointer.css({
                'background-image': 'url(' + opts.pointer + ')'
            })
            $turntable.css({
                'background-image': 'url(' + opts.background + ')'
            });
            $(this).find('.turntable-list li span').each(function(index, element){
                $(this).html(opts.text[index]);
                $(this).css({
                    'color': opts.textColor,
                    'font-size': opts.fontSize
                });
                $(this).parent().css({
                    'background-color': opts.itemBgcolor
                });
            });
            $pointer.click(function(){
                if($isRotating){
                    return;
                }else{
                    $isRotating = true;
                    var $speed = Math.floor(Math.random()*3 + 2)*1000;
                    $result = Math.floor(Math.random() * $tickets.length);
                    var $angle = 360 / ($tickets.length) * $result;
                    $angle += 360 * opts.rounds;
                    $pointer.css({
                        'transform': 'rotate(' + $angle + 'deg)',
                        'transition': 'transform ' + $speed + 'ms cubic-bezier(.68,-0.55,.27,1.55)'
                    });
                    setTimeout(function(){
                        opts.callback($angles[$result].text);
                        $isRotating = false;
                    },$speed);
                }
            });
            return this;
        };
        $.fn.turntable.defaults={
            items: 6, // 转盘的物品数目
            text: ['奖品1', '奖品2', '奖品3', '奖品4', '奖品5', '奖品6'], // 每个盘块对应的文字
            rounds: 5, // 转盘旋转的圈数
            pointer: 'pointer.png', // 指针图片路径
            background: 'background.jpg', // 转盘背景图片路径
            angles: [
                {
                    angle: [0, 45], // 每个盘块对应的角度范围
                    text: '奖品1',
                    color: '#fe6863'
                },
                {
                    angle: [315, 360],
                    text: '奖品2',
                    color: '#86c1fd'
                },
                {
                    angle: [225, 270],
                    text: '奖品3',
                    color: '#fcb047'
                },
                {
                    angle: [135, 180],
                    text: '奖品4',
                    color: '#fe6863'
                },
                {
                    angle: [270, 315],
                    text: '奖品5',
                    color: '#ff9c43'
                },
                {
                    angle: [45, 90],
                    text: '奖品6',
                    color: '#86c1fd'
                },
            ],
            fontSize: '48px', // 每个盘块文字的大小
            textColor: '#fff', // 每个盘块文字的颜色
            itemBgcolor: 'rgba(0,0,0,.7)', // 每个盘块的背景颜色
            callback: function(){ alert('恭喜你抽中了!'); } // 抽奖结束后的回调函数
        };

    })(jQuery);

    $(function(){
        $('.turntable').turntable({
            items: 8,
            text: ['50000元', '10000元', '5000元', '1000元', '500元', '100元', '50元', '谢谢参与'],
            rounds: 8,
            pointer: 'https://cdn.bootcdn.net/ajax/libs/jquery-circle-progress/1.2.2/img/circle-progress-back.png',
            background: 'https://cdn.bootcdn.net/ajax/libs/jquery-circle-progress/1.2.2/img/circle-progress-back.png',
            callback: function(text){
                alert('恭喜你抽中了:' + text);
            }
        });
    });
</script>
</body>
</html>

以上就是使用jQuery实现转盘抽奖功能的全部攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery实现转盘抽奖功能 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 解决WordPress使用CDN后博文无法评论的错误

    解决WordPress使用CDN后博文无法评论的错误,通常是因为CDN会将博客中的评论文件请求转发至CDN节点,而且CDN节点没有配置相应的条件来处理评论请求。具体步骤如下: 在CDN设置中搜索“Cache-Control”选项,将其设置为“no-cache”。这将防止CDN节点缓存评论请求。 搜索“HTTP头”选项,并输入以下代码: Edge-Cache-…

    jquery 2023年5月27日
    00
  • JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    当使用jQuery中Ajax的Post提交时,如果提交的数据中包含中文字符,有时在IE浏览器下会出现中文乱码的情况。这是因为IE浏览器默认使用的是GBK编码方式,而jQuery中默认使用的是UTF-8编码方式。为了解决这个问题,我们需要在客户端和服务端都进行相关编码的处理。 以下是解决中文乱码问题的完整攻略: 1. 在客户端(浏览器)中进行编码处理 在客户端…

    jquery 2023年5月27日
    00
  • jQWidgets jqxTabs宽度属性

    jQWidgets是一款基于jQuery的UI组件库,其中的jqxTabs组件可以用来创建选项卡式界面。宽度属性是指设置选项卡的宽度大小,可以通过以下两种方式实现: 方法一:设置选项卡固定宽度 要设置所有选项卡的固定宽度,可以在初始化选项卡时使用“width”属性来设置,例如: $("#myTabs").jqxTabs({ width: …

    jquery 2023年5月12日
    00
  • jQWidgets jqxScheduler contextMenu属性

    以下是关于 jQWidgets jqxScheduler 组件中 contextMenu 属性的详细攻略。 jQWidgets jqxScheduler contextMenu 属性 jQWidgets jqxScheduler 组件的 contextMenu用于设置日程表的上下文菜单。 语法 // 设置上下文菜单 $(‘#scheduler’).jqxSc…

    jquery 2023年5月12日
    00
  • jQuery :has() 选择器

    以下是关于jQuery中的:has()选择器的完整攻略: 什么是jQuery中的:has()选择器? jQuery中的:has()选择器是一种用于选择包含特定元素的元素的语法。使用这个选择器可以轻松选择包含特定元素的元素对进行操作。 如何使用jQuery中的:has()选择器? 可以使用以下代码选择包含特定元素的元素: $("element:has…

    jquery 2023年5月12日
    00
  • jQuery zTree如何改变指定节点文本样式

    要改变zTree中指定节点的文本样式,需要使用jQuery zTree的API中提供的方法。大体的步骤如下: 获取需要改变样式的节点(目标节点)的zTree节点对象; 修改目标节点的文本样式; 更新zTree显示。 以下是具体的操作步骤和示例说明: 1. 获取需要改变样式的节点 在zTree中,每个节点都有一个对应的节点对象,这个对象里包含了节点的所有信息和…

    jquery 2023年5月18日
    00
  • JQuery将文本转化成JSON对象需要注意的问题

    JQuery将文本转化成JSON对象是前端编程中经常用到的一个操作,下面主要讲解在使用JQuery将文本转化成JSON对象时需要注意的问题及步骤: 1. 确定JSON格式是否正确 在使用JQuery将文本转化成JSON对象之前,必须确保原始文本格式符合JSON格式要求。JSON格式要求对象的属性名必须用双引号包围,属性名和属性值之间必须用一个冒号“:”分割,…

    jquery 2023年5月18日
    00
  • js组件SlotMachine实现图片切换效果制作抽奖系统

    下面我将为您详细讲解如何使用js组件SlotMachine实现图片切换效果制作抽奖系统。 什么是SlotMachine SlotMachine是一个基于jQuery实现的轮播图插件,可以用来制作老虎机抽奖、幸运转盘等效果。通过SlotMachine可以轻松实现图片自动轮播、手动拖动轮播、点击按钮轮播等不同的轮播效果。该组件使用方便,只需要一行JavaScri…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部