CSS3做出响应式、可配置的抽奖转盘

这次给大家带来CSS3做出响应式、可配置的抽奖转盘,CSS3做出响应式、可配置的抽奖转盘的注意事项有哪些,下面就是实战案例,一起来看一下。

CSS3做出响应式、可配置的抽奖转盘

源于前段时候微信小程序最初火爆公测时段,把以前用 Canvas 实现的大转盘抽奖移植成微信小程序,无奈当时小程序对 Canvas 支持不够完善,只好降低用 CSS3 实现。虽然比不上 Canvas 绘图的绚丽,但也总算完成了一个抽奖的 Demo,详见:http://xiazai.jb51.net/201701/yuanma/wechat-canvas_jb51.rar

事后想起,CSS3 实现也并不是无有益处,比如简单、快捷、调试方便、渲染想来也是要比 Canvas 要高效的,更重要的一点是支持媒体查询,大转盘也可以做成响应式的。因此抽空整理,用纯 CSS3 实现一个大转盘抽奖 Demo 并记录下来。

如果有类似需求并不想麻烦了解细节,可移步这里——Canvas 完整的大转盘抽奖项目(可以直接拿来用)http://xiazai.jb51.net/201701/yuanma/canvas_jb51.rar

以下就直接贴代码了。

代码

HTML

JS

(function() {    // 奖品配置    var awards = [            {'index': 0, 'text': '耳机' , 'name': 'icono-headphone'},            {'index': 1, 'text': 'iPhone' , 'name': 'icono-iphone'},            {'index': 2, 'text': '相机' , 'name': 'icono-camera'},            {'index': 3, 'text': '咖啡杯' , 'name': 'icono-cup'},            {'index': 4, 'text': '日历', 'name': 'icono-calendar'},            {'index': 5, 'text': '键盘', 'name': 'icono-keyboard'}        ],        len = awards.length,        turnNum = 1 / len;  // 文字旋转 turn 值    var gbWheel = $('gbWheel'),        lineList = gbWheel.querySelector('ul.gb-wheel-line'),        itemList = gbWheel.querySelector('.gb-wheel-list'),        lineListHtml = [],        itemListHtml = [];    var transform = preTransform();    awards.forEach(function(v, i, a) {        // 分隔线        lineListHtml.push('
  • '); // 奖项 itemListHtml.push('

    '); itemListHtml.push('

    '); itemListHtml.push('

    '); itemListHtml.push(''); itemListHtml.push('

    '); itemListHtml.push('

    '); itemListHtml.push(v.text); itemListHtml.push('

    '); itemListHtml.push('

    '); itemListHtml.push('

    '); }); lineList.innerHTML = lineListHtml.join(''); itemList.innerHTML = itemListHtml.join(''); function $(id) { return document.getElementById(id); }; // 旋转 var i = 0; $('gbLottery').onclick = function() { i++; gbWheel.querySelector('.gb-wheel-content').style = transform + ': rotate('+ i * 3600 +'deg)'; } // transform兼容 function preTransform() { var cssPrefix, vendors = { '': '', Webkit: 'webkit', Moz: '', O: 'o', ms: 'ms' }, testEle = document.createElement('p'), cssSupport = {}; // 嗅探特性 Object.keys(vendors).some(function(vendor) { if (testEle.style[vendor + (vendor ? 'T' : 't') + 'ransform'] !== undefined) { cssPrefix = vendor ? '-' + vendor.toLowerCase() + '-' : ''; return true; } }); function normalizeCss(name) { name = name.toLowerCase(); return cssPrefix ? cssPrefix + name : name; } cssSupport = { transform: normalizeCss('Transform'), } return cssSupport.transform; }}());

    CSS

    html {    font-size: 10px}.gb-wheel-container ul,.gb-wheel-container li,.gb-wheel-container p {    margin: 0;    padding: 0}.gb-wheel-container ul,.gb-wheel-container li {    list-style: none}.gb-wheel-container {    margin: 0 auto;    position: relative;    width: 30rem;    height: 30rem;    border-radius: 50%;    box-shadow: 0 2px 3px #333, 0 0 2px #000;    overflow: hidden}.gb-wheel-content {    position: absolute;    left: 1rem;    top: 1rem;    z-index: 2;    width: 28rem;    height: 28rem;    box-sizing: border-box;    border-radius: inherit;    background-clip: padding-box;    background: -webkit-radial-gradient(rgba(100, 100, 100, 0.1) 15%, transparent 16%) 0 0,                  -webkit-radial-gradient(rgba(100, 100, 100, 0.1) 15%, transparent 16%) 8px 8px,    -webkit-radial-gradient(rgba(255, 255, 255, 0.1) 15%, transparent 20%) 0 1px,  -webkit-radial-gradient(rgba(255, 255, 255, 0.1) 15%, transparent 20%) 8px 9px;    background: radial-gradient(rgba(100, 100, 100, 0.1) 15%, transparent 16%) 0 0,                radial-gradient(rgba(100, 100, 100, 0.1) 15%, transparent 16%) 8px 8px,   radial-gradient(rgba(255, 255, 255, 0.1) 15%, transparent 20%) 0 1px,   radial-gradient(rgba(255, 255, 255, 0.1) 15%, transparent 20%) 8px 9px;    background-color: #ffcb3f;    background-size: 12px 14px}.gb-wheel-content:before {    content: ' ';    position: absolute;    left: -1rem;    top: -1rem;    z-index: -1;    width: 28rem;    height: 28rem;    border-radius: inherit;    border: 1rem solid #E44025;    box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.2) inset}.gb-wheel-list {    position: absolute;    left: 0;    top: 0;    width: inherit;    height: inherit;    z-index: 9999}.gb-wheel-item {    position: absolute;    left: 0;    top: 0;    width: 100%;    height: 100%;    color: #e4370e;    font-weight: bold;    text-shadow: 0 1px 1px rgba(255, 255, 255, 0.6)}.gb-wheel-icontent {    position: relative;    display: block;    padding-top: 1.5rem;    margin: 0 auto;    text-align: center;    -webkit-transform-origin: 50% 14rem;    -ms-transform-origin: 50% 14rem;    transform-origin: 50% 14rem}.gb-wheel-itext {    font-size: 1.4rem;    font-weight: lighter}.gb-wheel-iicon [class*=icono-] {    color: #e4370e}.gb-wheel-line {    position: absolute;    left: 0;    top: 0;    width: inherit;    height: inherit;    z-index: 99}.gb-wheel-litem {    position: absolute;    left: 14rem;    top: 0;    width: 1px;    height: 14rem;    background-color: rgba(228, 55, 14, 0.6);    overflow: hidden;    -webkit-transform-origin: 50% 14rem;    -ms-transform-origin: 50% 14rem;    transform-origin: 50% 14rem}.gb-wheel-btn {    position: absolute;    left: 11rem;    top: 11rem;    z-index: 400;    width: 8rem;    height: 8rem;    border-radius: 50%;    color: #F4E9CC;    background-color: #E44025;    line-height: 8rem;    text-align: center;    font-size: 2rem;    text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.6);    box-shadow: 0 3px 5px rgba(0, 0, 0, 0.6), 0 0 5px 4px rgba(0, 0, 0, 0.2) inset;    text-decoration: none}a.gb-wheel-btn {    border-bottom: none}.gb-wheel-btn::after {    position: absolute;    content: '';    left: 2.5rem;    top: -1rem;    width: 3rem;    height: 3rem;    background-color: #E44025;    -webkit-transform: rotate(45deg);    -ms-transform: rotate(45deg);    transform: rotate(45deg);    box-shadow: 0 3px 5px rgba(0, 0, 0, 0.6), 0 0 5px 4px rgba(0, 0, 0, 0.2) inset}.gb-wheel-btn.disabled,.gb-wheel-btn.disabled::after {    pointer-events: none;    background: #B07A7B;    color: #ccc}.gb-wheel-run {    -webkit-transition: transform 6s ease;    transition: transform 6s ease}@media only screen and (min-width: 320px) {    html {        font-size: 10px    }}@media only screen and (min-width: 375px) {    html {        font-size: 11.71875px    }}@media only screen and (min-width: 480px) {    html {        font-size: 15px    }}

    相信看了本文案例你已经掌握了方法,更多精彩请关注创想鸟其它相关文章!

    推荐阅读:

    linear-gradient的使用详解

    清除浮动的几种方法

    以上就是CSS3做出响应式、可配置的抽奖转盘的详细内容,更多请关注创想鸟其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
    发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1609671.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2025年12月24日 00:54:27
    下一篇 2025年12月24日 00:54:45

    相关推荐

    • CSS3实现扇形动画菜单流程详解

      这次给大家带来CSS3实现扇形动画菜单流程详解,CSS3实现扇形动画菜单的注意事项有哪些,下面就是实战案例,一起来看一下。 原文章请点击这里 简化版完整实例 CSS3扇形动画菜单*{padding: 0; margin: 0;}body{background:#b1b1b1;margin:0px;p…

      2025年12月24日
      000
    • 动态加载css详解

      这次给大家带来动态加载css详解,动态加载css的注意事项有哪些,下面就是实战案例,一起来看一下。 一、方法引用来源和应用 此动态加载css方法 loadCss,剥离自Sea.js,并做了进一步的优化(优化代码后续会进行分析)。 因为公司项目需要用到懒加载来提高网站加载速度,所以将非首屏渲染必需的c…

      好文分享 2025年12月24日
      000
    • css3+js实现3D行星运转

      这次给大家带来css3+js实现3D行星运转,css3+js实现3D行星运转的注意事项有哪些,下面就是实战案例,一起来看一下。 HTML部分 这里用前三个类为x、y、z的p来画的每一个星球的x、y、z轴,然后这些星球之间是可以嵌套的,就是像上面的代码一样,里面的星球是外面星球的卫星。 css部分 .…

      2025年12月24日
      000
    • HTML5+CSS3加载进度条与下载进度条实现

      这次给大家带来HTML5+CSS3加载进度条与下载进度条实现,HTML5+CSS3加载进度条与下载进度条实现的注意事项有哪些,下面就是实战案例,一起来看一下。 效果图: 1、html结构: 0%  简单分析下: p.loadBar代表整个进度条 p.loadBar p 设置了圆角表框 ,p.load…

      2025年12月24日
      000
    • CSS3制作粉红色登录界面

      这次给大家带来CSS3制作粉红色登录界面,CSS3制作粉红色登录界面的注意事项有哪些,下面就是实战案例,一起来看一下。 心血来潮,想学学 material design 的设计风格,就尝试完成了一个登录页面制作. 这是整体效果. 感觉还不错吧,结尾会附上代码 在编写的过程中,没有使用任何图片或者字体…

      2025年12月24日 好文分享
      000
    • css3视觉特效的实现

      这次给大家带来css3视觉特效的实现,实现css3视觉特效的注意事项有哪些,下面就是实战案例,一起来看一下。 一、单侧阴影 1、box-shadow属性的应用,格式:h-shadow v-shadow blur spread color inset属性取值介绍 h-sahdow:水平阴影的位置,允许…

      2025年12月24日 好文分享
      000
    • CSS3的浏览器兼容问题

      这次给大家带来CSS3的浏览器兼容问题,CSS3浏览器兼容的注意事项有哪些,下面就是实战案例,一起来看一下。 本篇介绍了CSS3与页面布局学习总结——浏览器兼容与前端性能优化,具体如下: 一、浏览器兼容 1.1、概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题…

      2025年12月24日 好文分享
      000
    • CSS实现书签图案的效果

      这次给大家带来css实现书签图案的效果,css实现书签图案的注意事项有哪些,下面就是实战案例,一起来看一下。 示例代码如下: border制作书签(图形) .p2:before { /*做一个书签效果*/ position: absolute; /*必须*/ top: 50px; left: 20p…

      好文分享 2025年12月24日
      000
    • CSS实现3d半透明立方体

      这次给大家带来CSS实现3d半透明立方体,CSS实现3d半透明立方体的注意事项有哪些,下面就是实战案例,一起来看一下。 效果图如下: 示例代码: new document //css部分html{font-size:62.5%;}img{width:300px;height:300px;} #sta…

      2025年12月24日
      000
    • css3实现动画自行车效果

      这次给大家带来css3实现动画自行车效果,css3实现动画自行车效果的注意事项有哪些,下面就是实战案例,一起来看一下。 首先来看看实现的效果图(静态): 实例源码: 自行车 * { margin: 0; padding: 0 } ol, ul { list-style: none/*去掉圆点或数字*…

      2025年12月24日
      000
    • CSS画出红色爱心

      这次给大家带来CSS画出红色爱心,CSS画出红色爱心的注意事项有哪些,下面就是实战案例,一起来看一下。 第一步: 先画一个正方形。如图: css画桃心 .heart-body { width: 500px; margin: 100px auto; position: relative; } .hea…

      2025年12月24日 好文分享
      000
    • css3的新属性box-sizing详解

      这次给大家带来css3的新属性box-sizing详解,css3属性box-sizing的注意事项有哪些,下面就是实战案例,一起来看一下。 在了解box-sizing之前,让我们来稍稍回顾一下盒子模型,模型分为:标准盒模型+IE盒模型。那这有什么区别呢?见图所示: 从上图可以看到标准 w3c 盒子模…

      2025年12月24日 好文分享
      000
    • CSS3实现鼠标悬停时边框旋转特效

      这次给大家带来CSS3实现鼠标悬停时边框旋转特效,CSS3实现鼠标悬停时边框旋转特效的注意事项有哪些,下面就是实战案例,一起来看一下。 纯CSS3实现的鼠标悬停时边框旋转的效果: 实现代码如下,代码中注释已经比较详细,就不再多说了: Document body { width: 40rem; hei…

      2025年12月24日
      000
    • CSS3中nth-child与nth-of-type的区别以及使用技巧

      这次给大家带来CSS3中nth-child与nth-of-type的区别以及使用技巧,使用nth-child与nth-of-type的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS3中nth-child与nth-of-type的区别其实很简单::nth-of-type为什么要叫:nth-o…

      2025年12月24日
      000
    • css样式中的border-image使用详解

      这次给大家带来css样式中的border-image使用详解,使用css样式中border-image的注意事项有哪些,下面就是实战案例,一起来看一下。 border-image-source 属性设置边框的图片的路径[none | ] p { border: 20px solid #000; bo…

      好文分享 2025年12月24日
      000
    • CSS与HTML常见的使用误区

      这次给大家带来CSS与HTML常见的使用误区,CSS与HTML使用的注意事项有哪些,下面就是实战案例,一起来看一下。 误区一.多p症  Home About Concact 上述使用使用多余的p标签现状,就称为“多p症”,理应简化成下 Home About Concact 误区二.多类class症 …

      2025年12月24日
      000
    • html+css中的四种隐藏方式

      这次给大家带来html+css中的四种隐藏方式,html+css中隐藏方式的注意事项有哪些,下面就是实战案例,一起来看一下。 1.opacity:0只是把元素隐藏起来了 ,但是还是占有布局,所以还是对布局有影响 snda:opacity:0只是把元素隐藏起来了 ,但是还是占有布局,所以还是对布局有影…

      好文分享 2025年12月24日
      000
    • CSS实现一级导航栏

      这次给大家带来CSS实现一级导航栏,CSS实现一级导航栏的注意事项有哪些,下面就是实战案例,一起来看一下。 第一步:引入css样式表,新建一个id为nav的层,使用、、标签来制作完成效果。 首页 首页 首页 首页 首页 第二步设置CSS样式: 1.设置nav的属性 #nav{ width: 500p…

      2025年12月24日
      000
    • CSS有几种实现三栏布局的方法

      这次给大家带来CSS有几种实现三栏布局的方法,CSS实现三栏布局的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 其实不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那…

      好文分享 2025年12月24日
      000
    • 用css实现浮雕效果

      这次给大家带来用css实现浮雕效果,用css实现浮雕效果的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 最近在看百度地图看到了一个效果,感觉这个效果用在网页上应该蛮赞的,于是就学习了一下。 效果图如下: 浮雕效果需要用到伸缩盒的知识(flex) flex在chrome是完全支持的,要加-w…

      2025年12月24日
      000

    发表回复

    登录后才能评论
    关注微信