申请一个免费的毒鸡汤api,并且用原生JS实现竖行文本的打字机效果

2,411 阅读8分钟

这是我参与更文挑战的第12天,活动详情查看: 更文挑战

前言

今天是端午节放假的第一天,想着给我的博客首页添加一些有意思的东西,思来想去,准备在首页添加一句毒鸡汤,毒鸡汤一定要是随机的,每次刷新都会有不同的句子,然后通过打字机的效果表现出来。为了巩固JS基础,我决定先用原生JS做个Demo出来,撸起袖子说做就做,效果如下图。

GIF 2021-6-12 22-37-40.gif

毒鸡汤的接口

毒鸡汤的句子千千万万,我没有条件自己搞个数据库和接口出来,所以当然最好是有免费现成的最香啦!我找了好久,最后用的是天行数据API接口,不是打广告哈,毕竟我这小小的阅读量也没人找我打广告~

先简单整理一下天行数据部分开放API接口:

接口名称接口地址说明
微信链接转换www.tianapi.com/apiview/89将临时链接转为永久链接
查询微信全文www.tianapi.com/apiview/88获取微信全文头像等信息
综合新闻www.tianapi.com/apiview/87混合输出全频道新闻数据
二十四节气www.tianapi.com/apiview/86农历节气数据接口
汽车新闻www.tianapi.com/apiview/85汽车行业新闻资讯接口
血型配对www.tianapi.com/apiview/84血型性格与姻缘的关联
生肖配对www.tianapi.com/apiview/83中华传统十二生肖配对
图片编码www.tianapi.com/apiview/82将图片转为base64编码
微信智能接口www.tianapi.com/apiview/81接入微信公众和小程序平台
土味情话www.tianapi.com/apiview/80甜到腻嘴的土味情话接口
互联网资讯www.tianapi.com/apiview/79互联网资讯新闻接口
星座运势www.tianapi.com/apiview/78查询十二星座每日运势
微信最新文章www.tianapi.com/apiview/77获取公众号最新文章接口
恶意IP检测www.tianapi.com/apiview/75实时恶意IP检测接口
恶意链接检测www.tianapi.com/apiview/74实时恶意链接检测接口
获取网页信息www.tianapi.com/apiview/73获取网页头部信息接口
天气预报www.tianapi.com/apiview/72一周天气预报API接口
汉字转拼音www.tianapi.com/apiview/70汉字转拼音API接口
动漫资讯www.tianapi.com/apiview/69全网热点动漫资讯API
网络热点www.tianapi.com/apiview/68网络实时搜索热点
抽取网页图片www.tianapi.com/apiview/67支持按格式抽取网页中的图片
新闻全文www.tianapi.com/apiview/66该接口可获取新闻全文内容
频道列表www.tianapi.com/apiview/65天行数据新闻频道ID数据
财经新闻www.tianapi.com/apiview/64了解身边的经济大事
游戏资讯www.tianapi.com/apiview/63每日游戏精选新闻
英语一句话www.tianapi.com/apiview/62每日英语一句有哲理的话
优美诗句www.tianapi.com/apiview/61意境优美的诗词句
唐诗三百首www.tianapi.com/apiview/60一部流传很广的唐诗精华选集
唐诗大全www.tianapi.com/apiview/59唐朝诗句大全API接口
CBA新闻www.tianapi.com/apiview/58CBA新闻咨询API接口
简说历史www.tianapi.com/apiview/57一句话简说历史
小段子www.tianapi.com/apiview/56品味不一样的生活
实时股价www.tianapi.com/apiview/55高质量股票实时报价
顺口溜www.tianapi.com/apiview/54一种好玩有趣的口头韵文
精美句子www.tianapi.com/apiview/53优美句子一句话签名
语言翻译APIwww.tianapi.com/apiview/52支持多国语言互译
通用接口www.tianapi.com/apiview/51支持所有新闻频道数据分类输出
网页转APIwww.tianapi.com/apiview/50实现任意图文列表类资讯输出
英汉词典www.tianapi.com/apiview/49包含所有常用英文单词汉语解释
中文词典www.tianapi.com/apiview/48中文大辞典API接口
天行机器人www.tianapi.com/apiview/47一个有趣的AI机器人
中文分词APIwww.tianapi.com/apiview/46效率极高的中文分词接口
中国老黄历www.tianapi.com/apiview/45中国老黄历API
手机归属地www.tianapi.com/apiview/44查询手机号码所属地区
ip地址查询www.tianapi.com/apiview/43最新的IP地址库查询接口
星座配对www.tianapi.com/apiview/42支持单人和双人配对搜索
二维码解码www.tianapi.com/apiview/41二维码解码API接口
二维码编码www.tianapi.com/apiview/40二维码编码API接口
神回复www.tianapi.com/apiview/39一句神回复惊醒梦中人
歇后语www.tianapi.com/apiview/38短小风趣又像谜语的句子
绕口令www.tianapi.com/apiview/37初入江湖都会化肥会挥发
网络取名www.tianapi.com/apiview/36随机取一个好听的网名
网址转换www.tianapi.com/apiview/35将复杂的长网址为短连接
股市术语www.tianapi.com/apiview/34股海无涯回头是岸
网络热词www.tianapi.com/apiview/33网络上的流行语来龙去脉
地名谜语www.tianapi.com/apiview/32根据提示猜城市名称
一战到底www.tianapi.com/apiview/31一站到底竞答应用必备
成语典故www.tianapi.com/apiview/30了解每个成语的典故来源
历史的今天www.tianapi.com/apiview/29历史的今天API
脑筋急转弯www.tianapi.com/apiview/28脑筋急转弯API接口
生日性格www.tianapi.com/apiview/27预示性格和生日某种关联
名言警句www.tianapi.com/apiview/26名人名言学以致用
雷人笑话www.tianapi.com/apiview/25笑一笑十年笑
周公解梦www.tianapi.com/apiview/24梦也许预示着某种含义
菜谱查询www.tianapi.com/apiview/23生活类厨房类应用必备API
人工智能www.tianapi.com/apiview/22AI人工智能行业新闻资讯API
区块链新闻www.tianapi.com/apiview/21区块链行业相关新闻资讯API
IT资讯www.tianapi.com/apiview/20IT行业相关新闻资讯API
VR科技www.tianapi.com/apiview/19VR虚拟现实新闻资讯API
美女图片www.tianapi.com/apiview/18美女图片API
奇闻异事www.tianapi.com/apiview/17世界奇闻资讯API
健康知识www.tianapi.com/apiview/16健康知识养生资讯文章资讯
旅游资讯www.tianapi.com/apiview/15旅游景点新闻资讯API
移动互联www.tianapi.com/apiview/14移动互联网行业资讯API
军事新闻www.tianapi.com/apiview/13军事资讯API
苹果新闻www.tianapi.com/apiview/12Apple产品动态API
创业新闻www.tianapi.com/apiview/11互联网行业新闻AP
科技新闻www.tianapi.com/apiview/10信息科技行业新闻
足球新闻www.tianapi.com/apiview/9国足新闻动态实时更新
NBA新闻www.tianapi.com/apiview/8NBA新闻动态API
体育新闻www.tianapi.com/apiview/7国内外体育API
娱乐新闻www.tianapi.com/apiview/6娱乐新闻API服务
国际新闻www.tianapi.com/apiview/5国际新闻API接口服务
国内新闻www.tianapi.com/apiview/4国内新闻API接口服务
社会新闻www.tianapi.com/apiview/3了解社会新闻大事
微信主页www.tianapi.com/apiview/2微信主页文章实时同步
微信精选www.tianapi.com/apiview/1微信公众号精选文章

功能还是很多很好玩的,可以做出很多有意思的东西。不过我们要用到的接口并不在上面的开放接口里面,而是注册了免费会员之后,申请的免费接口。

在注册了免费会员之后,我们直接来到接口大全的页面,可以看到,有很多有意思的接口提供:

image.png

我们可以在这里搜索我们想要的接口,搜索“毒鸡汤”,结果如下:

image.png

点进去之后,有调用示例,返回参数等一应俱全,直接申请即可:

image.png

申请完毕之后,可以在数据管理》我申请的接口中查到该接口:

image.png

可以看到毒鸡汤的接口免费次数是100次,反正对我来说是足够用啦~如果实在不够还可以用天豆抵扣,具体天豆怎么获得之类的,我也不太清楚,这里不做讨论。

好了,既然我们已经成功得到了毒鸡汤的接口,下面就可以来实现一个竖版的打字机效果啦!

竖版打字机效果

竖版的打字机,必须要先把文字竖起来(好像是句废话),这里我采用了简单粗暴的方法,在这个打字机效果的盒子内,每一列字是一个p标签,p标签包含span标签,span标签里面是文字,给p标签一个字的宽度,宽度不够,文字会自动换行。基本布局代码如下所示:

    <style>
        p {
            float: left;
            width: 1em;
            height: 100%;
            font-size: 14px;
            margin: 5px;
            text-align: left;
        }
    </style>

    <div class="signature">
        <p>
            <span>努力把日子填满</span>
        </p>
        <p>
            <span>别来提醒我有多孤单</span>
        </p>
    </div>

效果如图:

image.png

css效果完成之后,我们来看打字机的效果如何实现:

想要实现打字机的效果,我们要考虑以下几个方面:

  • 文本要根据标点符号进行切割,转为数组,可以该采用正则表达式。
  • 文字逐个展示出来,所以使用字符串的substring方法最合适不过了。
  • 光标的闪烁效果直接用jq的fadeOut和fadeIn淡入淡出来实现即可。 于是我立马写了如下代码:
    let text // 打印的文本
    let arr // 文本根据标点符号切割后的数组
    let i = 0 // 初始数组循环下标从0开始
    function daziji(i) {
        let ps = $(".signature").children("p") // 获取盒子内共有几行文本
        if (i == ps.length) return false // 如果0行文本,直接结束函数
        let index = 0 // 当前行文字字数
        let dazi = setInterval(function() {
            ps[i].childNodes[1].innerText = "I" 
            $(ps[i].childNodes[1]).fadeOut(300).fadeIn(300)
            ps[i].childNodes[0].innerText = arr[i].substring(0, index++)
            if (index > arr[i].length) {
                $(ps[i].childNodes[1]).remove()
                clearInterval(dazi)
                daziji(++i)
            }
        }, 400)
    }

调用毒鸡汤接口来获取句子,然后在页面展示出来,代码如下:

    // 通过天行接口调用毒鸡汤
    function getSoup() {
        $.ajax({
            type: "get",
            url:
            // 毒鸡汤
            "https://api.tianapi.com/txapi/dujitang/index?key=你的key值",
            success: function(success) {
                if (success.code == 200) {
                    text = success.newslist[0].content
                    var reg = /[,;|,;|;;|;;|:;|:;|。;|.;|?;|?;| ;]/g // 正则部分只判断了这些标点符号的情况
                    arr = text.split(reg)
                    for (var j = 0; j < arr.length; j++) {
                        let pp = "<p><span></span><span></span></p>"
                        $(".signature").append(pp)
                    }
                    daziji(i)
                }
            },
            error: function(error) {
                console.error("获取数据错误" + error)
                text = `黑夜给了我黑色的眼睛 ,我却用它寻找光明`
                var reg = /[,;|,;|;;|;;|:;|:;|。;|.;|?;|?;| ;]/g
                arr = text.split(reg)
                for (var j = 0; j < arr.length; j++) {
                    let pp = "<p><span></span><span></span></p>"
                    $(".signature").append(pp)
                }
                daziji(i)
            }
        })
    }

看一下效果吧:

GIF 2021-6-12 23-45-44.gif

完美运行!毕竟是自己亲手写的代码,尤其是端午节的假期,依旧孜孜不倦敲代码,所以看起来特别有成就感!

后记

毕竟是假期的第一天,玩了一天,晚上回来实现了这个效果立马整理了文章发出来,多多少少会考虑不周,代码有些粗糙和可优化的地方,当然啦,最重要的还是好玩。如果本文有帮助到你,希望点赞关注大冰块一下,如果有更好的意见也欢迎评论探讨~

PS: 今天是我参加掘金更文挑战的第12天,端午节依旧努力淦文章,已经坚持12天啦!有志者,事竟成。大家一起加油~

更文挑战的文章目录如下: