掘金可视化智能抽奖,支持暂停和继续, 插件版

简介: 今天我们实现的是可视化智能抽奖, 还是先看效果!!!

1.JPG


前言



玩转掘金 系列,对掘金扩展一些有意思的功能,比如:



今天我们实现的是可视化智能抽奖, 还是先看效果!!!


效果演示


因本人矿石太少,所以效果不明显,见谅!!!!


2.JPG


源码



掘金智能抽奖源码JJSignAndLD

需要安装游猴脚本,或者FEHelper插件,贴入相关代码即可!!


数据分析



API的请求中有两个通用参数, 一个aid一个uuid, 有用嘛,估计有,不用行不行,行!!!!


获取奖池信息



请求地址:https://api.juejin.cn/growth_api/v1/lottery_config/get?aid=[aid]&uuid=[uuid]

请求方式: GET

请求参数: QueryString aiduuid

返回结果:

就是奖池的信息,之后做展示用!


{
    "data": {
        "lottery": [{
            "lottery_id": "6981716980386496552",   // 奖ID 
            "lottery_name": "66矿石",              // 奖名称
            "lottery_type": 1,
            "lottery_image": "https://xxxx.image", // 奖品图片
            "unlock_count": 0
        },
        ......            
       ]
    }
}
复制代码


抽奖



请求地址:https://api.juejin.cn/growth_api/v1/lottery/draw?aid=[aid]8&uuid=[uuid]

请求方式: POST

请求参数: QueryString aiduuid

返回结果


{
    data: {
        history_id: "6997575438109261838",
        id: 19,
        lottery_id: "6981716980386496552",
        lottery_image: "",
        lottery_name: "66矿石", // 中奖名
        lottery_type: 1, 
    }
}
复制代码


思路



思路往往比代码本身更重要!


游猴脚本 | FeHelper + JS脚本, 非常简单!


  1. 获取奖池信息
  2. 执行抽奖
  3. 根据执行结果状态码,执行响应操作


代码实现



样式注入


动态创建style标签,注入到head节点下


const styleContent = `
    ._jj_draw_container {
        position:fixed;
        top: 80px;
        right: 0;
        z-index: 9999;
        background-color: rgba(0,0,0,0.6);
        padding: 20px;
    }`
     function appendStyle(text) {
        const styleEl = document.createElement('style');
        styleEl.textContent = text;
        document.head.appendChild(styleEl);
    }
     appendStyle(styleContent);
复制代码


循环请求与终止



双重判断


  1. isDrawing代表在抽奖
  2. 返回结果err_no不等于代表失败,err_msg代表错误消息,这里最可能失败的原因就是矿石不足


async function onDraw(ev) {
        if (isDrawing) {
            return;
        }
        isDrawing = true;
        try {
            let errNo = 0;
            do {
                if(!isDrawing){
                    break;
                }
                const res = await doDraw();
                errNo = res.err_no;
                if (errNo !== 0) {
                    alert(res.err_msg);
                    isDrawing = false;
                    break;
                }
                // 增加奖励
                addPrize(res.data)
                // 渲染
                renderPrizes();
                // 暂停16ms
                await delay(undefined, 16).run();
                // 单次调试用
                //isDrawing = false;
                //break;
            } while (errNo == 0)
        } catch (err) {
            isDrawing = false
            alert(err.message);
        }
    }
复制代码


更多代码请参见 JJSignAndLD, css + js 约250行代码。


写在最后


3-5分钟,500-1000字,有所得,而不为所累,如果你觉得不错,你的一赞一评就是我前行的最大动力。

技术交流群请到 这里来。 或者添加我的微信 dirge-cloud,一起学习。

相关文章
|
监控 Linux 开发者
Docker服务systemd配置文件详解
Docker服务systemd配置文件详解
655 0
|
Cloud Native Dubbo 应用服务中间件
阿里巴巴捐献的14个顶级开源项目,国内开源贡献第一!
代表性的项目包括龙蜥操作系统、Apache RocketMQ、Apache Dubbo、Spring Cloud Alibaba 等
|
数据采集 存储 数据管理
CDGA|如何实施非常精准的数据治理策略?
精准的数据治理需要企业从设定明确目标、制定适应性策略、构建完善组织结构、制定严谨制度流程、采用先进技术工具、加强事前预防、推动数据驱动决策以及建立健全监督与评估机制等多个方面入手。只有这样,企业才能有效应对数据时代带来的挑战,充分释放数据价值,为组织的可持续发展提供有力支撑。
|
前端开发 API 数据格式
前端常见状态码以及解决方式
前端开发中,HTTP状态码揭示了请求的处理结果。200 OK表示成功;400 Bad Request指请求错误,需检查URL、参数和数据格式;401 Unauthorized提示需验证身份,检查凭证有效性;403 Forbidden表示权限不足,检查资源授权和服务器配置;404 Not Found意味着资源未找到,确认URL正确性;500 Internal Server Error是服务器错误,需查看服务器日志和代码。针对这些问题,相应调整请求或服务器设置可解。
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
947 5
|
SQL Oracle 关系型数据库
sql语句两个字段合并或者两个字段拼接显示
sql语句两个字段合并或者两个字段拼接显示
449 0
|
XML JSON 分布式计算
如何设计财务对账系统 —— 从0到1搭建对账中心实战
卡拉云快速搭建企业内部对账系统
12434 3
如何设计财务对账系统 —— 从0到1搭建对账中心实战
|
SQL 关系型数据库 数据库
Postgresql基本操作命令
这些是PostgreSQL数据库的一些基本操作命令,用于创建、管理和查询数据库。根据您的需求,可以使用这些命令执行各种数据库操作。
804 4
|
JavaScript 前端开发
【Web 前端】JS中检测数据类型的有哪些?
【4月更文挑战第22天】【Web 前端】JS中检测数据类型的有哪些?
|
数据中心
【专栏】交换机的电口和光口,包括它们的概念、特点、应用场景及区别。做网络的这个常识得懂!
【4月更文挑战第28天】本文详细探讨了交换机的电口和光口,包括它们的概念、特点、应用场景及区别。电口采用RJ45接口,适合短距离、低成本的局域网连接,而光口利用光纤进行高速、长距离传输,适用于大型数据中心和广域网。电口与光口的主要区别在于传输介质、距离、带宽、成本、抗干扰能力和安装维护难度。选择时需根据传输距离、带宽需求、成本及网络环境来决定。了解这些知识能帮助我们更好地设计和管理网络系统。
2362 0