[JS插件]功能十分强大的打字机效果: easy-typer-js

easy-typer-js

功能十分强大打字机插件,兼容原生JS和MVVM类框架(Vue, React...),随心所欲的输出。

一、效果展示

image

easy-typer-js是一个轻量级的插件, 用于实现页面文字的打字机效果. 它使用起来非常简单, 只需要几行代码就能实现高大上的打字机效果.而且对MVVM框架支持完美,还兼容原生JS.

二. 使用easy-typer-js

1. 引入easy-typer-js

  • 方法1: ES6模块化引入(官方推荐)
// 安装
npm install easy-typer-js --save
或者
yarn add easy-typer-js
// 引入
import EasyTyper from 'easy-typer-js'
// 实例化
const typed = new EasyTyper(obj, input, fn, hooks)
  • 方法2: 常规导入
// 下载至本地
<script src="./easy-typer-js"></script>

//cdn导入
<script src="https://cdn.jsdelivr.net/npm/easy-typer-js@1.0.1/easyTyper.min.js"></script>

2.完整实战使用一言Api进行打字机循环输出效果

2.1 在MVVM类框架中使用(Vue)

<template>  
  <div>
    {{ this.obj.output }}
    <span class="easy-typed-cursor">|</span>
  </div>
</template>

<script>
import EasyTyper from 'easy-typer-js'
export default {
  name: 'home',
  data() {
    return {
      obj: {
        output: '',
        isEnd: false,
        speed: 80,
        singleBack: 1,
        sleep: 6000,
        type: 'rollback',
        backSpeed: 40
      }
    }
  },
  mounted() {
    this.init()
  },
  methods: {
    // 初始化
    init() {
      this.fetchData()
    },
    fetchData() {
      fetch('https://v1.hitokoto.cn')
        .then(res => {
            return res.json()
        })
        .then(({ hitokoto }) => {
            this.initTyped(hitokoto)
        .catch(err => {
            console.error(err)
        })
    },
    initTyped(input, fn, hooks) {
      const obj = this.obj
      const typed = new EasyTyper(obj, input, fn, hooks)
    }
  }
}
</script>

<style lang="stylus">
  .typed-cursor
    margin-left: 10px
    opacity: 1
    -webkit-animation: blink 0.7s infinite
    -moz-animation: blink 0.7s infinite
    animation: blink 0.7s infinite
  @keyframes blink
    0%
      opacity: 1
    50%
      opacity: 0
    100%
      opacity: 1
  
  @-webkit-keyframes blink
    0%
      opacity: 1
    50%
      opacity: 0
    100%
      opacity: 1
  
  @-moz-keyframes blink
    0%
      opacity: 1
    50%
      opacity: 0
    100%
      opacity: 1
</style>

2.2原生实例

<script src="../lib/esayTyped.test.js"></script>
<style>
  .easy-typed-cursor {
    margin-left: 10px;
    opacity: 1;
    -webkit-animation: blink 0.7s infinite;
    -moz-animation: blink 0.7s infinite;
    animation: blink 0.7s infinite;
  }
  @keyframes blink {
    0% {opacity: 1;}
    50% {opacity: 0;}
    100% {opacity: 1;}
  }
  @-webkit-keyframes blink {
    0% {opacity: 1;}
    50% { opacity: 0;}
    100% {opacity: 1;}
  }
  @-moz-keyframes blink {
    0% {opacity: 1;}
    50% {opacity: 0;}
    100% {opacity: 1;}
  }
</style>
<div id="output">

</div>
<script>
  const obj = {
    output: '', // 输出内容  使用MVVM框架时可以直接使用
    type: 'normal',
    isEnd: false,
    speed: 80,
    backSpeed: 40,
    sleep: 3000,
    singleBack: true
  }
  const typing = new easy-typer-js(obj, `黎明前的黑暗是最深不见底的黑暗!`, (instance)=>{
    // 回调函数 如果这里使用了递归调用会一直循环打印,需要在外部触发停止
    // 此回调用于获取新的数据然后重新输出
    instance.input = `天不生我彭小呆,万古长青一生狂!`
    instance.play()
  }, (output, instance)=>{
    // 钩子函数,每一帧的数据获取和实例easy-typer-js的获取
    document.getElementById('output').innerHTML = `${output}<span class="easy-typed-cursor">|</span>`
  })
  // 12秒后停止
  let timer = setTimeout(() => {
    clearTimeout(timer)
    timer = null
    typing.close()
    alert('stop!')
  }, 12000)
</script>

效果如下

image

加载慢的同学可以看 http://img.pqs.guozhaoxi.top/20191221175917.MP4

三、参数解析 ( Parameter configuration )

3.1 new EasyTyper(obj, input, fn, hooks)

参数 说明 回调 是否必须
obj 配置对象 无 必须一定有且格式要对,十分严格,比起教导主任毫不逊色
input 内容输入 无 可以没有,会有小彩蛋
fn 完成一次output输出后的回调函数 当前easy-typer-js实例instance 否
hooks 钩子 钩在每一帧将要完成的时间片段上 当前帧输出的内容、当前easy-typer-js实例instance 否

使用方法如下(仅供参考)

  const obj = {
    output: '', // 输出内容  使用MVVM框架时可以直接使用
    type: 'normal',
    isEnd: false,
    speed: 80,
    backSpeed: 40,
    sleep: 3000,
    singleBack: true
  }
  const typing = new easy-typer-js(obj, `黎明前的黑暗是最深不见底的黑暗!`, (instance)=>{
    // 回调函数 如果这里使用了递归调用会一直循环打印,需要在外部触发停止
    // 此回调用于获取新的数据然后重新输出
    instance.input = `天不生我彭小呆,万古长青一生狂!`
    instance.play()
  }, (output, instance)=>{
    // 钩子函数,每一帧的数据获取和实例easy-typer-js的获取
    document.getElementById('output').innerHTML = `${output}<span class="easy-typed-cursor">|</span>`
  })
  // 12秒后停止
  let timer = setTimeout(() => {
    clearTimeout(timer)
    timer = null
    typing.close()
    alert('stop!')
  }, 12000)

3.2 obj配置

参数(params) 含义(meaning) 默认值(default)
output 输出内容,使用MVVM框架时直接使用 {{ obj.output }} NA
type 下一次的行为 'roolback', 'normal', 'custom' NA
isEnd 全局控制是否终止 NA
speed 打字速度 NA
backSpeed 回滚速度 NA
sleep 完整输出完一句话后,睡眠时间一定时间后回滚 NA
singleBack 单次的回滚(优先级高于type) NA

3.3 暴露出可直接调用方法

方法名 说明 参数
close 停止打字 无
sleep 单独可以调用睡眠线程,可以使用在任何地方 ms(毫秒)

四、更多请查阅

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,839评论 1赞 32
  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,290评论 0赞 2
  • 有个外教,是不是让人很羡慕的事? 很多人这辈子求学过程中,很难碰到有个外国的老师跟你面对面的交流个互动把。...
    东门周杰伦阅读 422评论 0赞 0
  • 今天的天气依旧不好。其实我不想用今天这两个字,但就像我这个字一样,禁不住就会用到,和人聊天时,最常说的就是我今天…...
    言之周周阅读 181评论 0赞 0
  • 亲情血浓于水,是一辈子充满爱的情谊! 可现实之中处理不好的亲情关系就如同枝桠缠绕树干一样,错综复杂,剪不断理还乱,...
    祝雨葭阅读 406评论 0赞 1

友情链接更多精彩内容