JSFiddle - React, Tailwind, and code Playground
HTML
<div class="container">
<div class="title">Hello Loder</div>
<div class="wrapper"><div class="typed"></div></div>
</div>
<script src="https://cdn.bootcss.com/typed.js/2.0.6/typed.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/[email protected]/dist/loderWithRoute.umd.js"></script>
SCSS
.container {
position: absolute;
left: 50%;
top: 30%;
transform: translate(-50%, -50%);
}
.title {
font-size: 40px;
text-align: center;
}
.wrapper {
text-align: center;
}
.typed {
display: inline-block;
}
Babel + JSX
// 注册资源 —— 应用创建函数
loder('createApp', () => Promise.resolve(createApp))
// 注册资源 —— 请求客户端
const url = '//cdnjs.cloudflare.com/ajax/libs/axios/0.17.1/axios.js'
loder('axios', () => loder.loadScript(url).then(() => window.axios))
const fetchHomeData = () => Promise.resolve('homeData')
const fetchAboutData = () => Promise.resolve('aboutData')
const fetchFallBackData = () => {
const axios = loder.get('axios')
return axios('https://jsonplaceholder.typicode.com/posts')
}
// 注册资源 —— 首屏数据
loder.route('/home', () => {
loder('data', fetchHomeData)
})
loder.route('/about', () => {
loder('data', fetchAboutData)
})
loder.route('*', () => {
// 等待axios加载完再发起请求
loder('data', ['axios'], fetchFallBackData)
})
// 注册任务 —— 启动应用
loder('bootstrap', ['createApp', 'data'], () => {
const create = loder.get('createApp') // 所有数据和应用资源已加载就绪
create()
})
// 开始执行bootstrap
loder.run('bootstrap')
// createApp.js
function createApp() {
const { data } = loder.get('data') // 数据已就绪,可以同步获取
var typed = new Typed('.typed', {
strings: data.map(post => {
const len = Math.random()*20+20
return post.title.slice(0, ~~len)
}),
typeSpeed: 20,
backSpeed: 10,
});
}