bay-components
v0.3.4
Published
common functions for shanbay frontend projects
Downloads
54
Readme
bay-components
Audio
只要页面有 audio 标签,调用下面的函数就会渲染出 audio 的控制条等内容
> initAudios('audio')
Video
只要页面有 video 标签,调用下面的函数就会渲染出 video 的控制条等内容
> initVideos('audio', {
isFullscreenCustomed: true,
onFullscreennChange: (type, style) => console.log(type, style),
onTimeUpdate: (currentTime, duration, video) => console.log(currentTime, duration, video),
onStartBtnClick: function () { console.log('start play') },
onPlay: function () { console.log('play') },
onPause: function () { console.log('pause') },
onEnd: function () { console.log('end') },
captions: [{
startTime: 1,
endTime: 6,
text: 'hello',
transText: '你好',
}, {
startTime: 10,
endTime: 16,
text: 'hello hahaha',
transText: '你好啦啦啦',
}],
});
给 video 标签加上 data-poster 添加 poster
<video src="xxx.mp4" data-poster="xxx.png"></video>
PullToLoadList
下拉自动请求,加载更多列表。
> var list = new PullToLoadList({
ipp: 10,
pageNum: 0,
total: 0,
apiUrl: '',
threshold: 10,
renderItem: (item) => item,
onLoadedFirstPage: () => {},
onLoadedError: (status, msg) => {},
parseData: data => ({
items: data.objects,
total: data.total,
}),
});
其中 threshold 是下拉到底部的范围,默认下拉到距页面底部 10px 的范围内会继续请求下一页的数据。renderItem 是每条数据的渲染函数。parseData 是对请求返回的数据进行的处理函数。onLoadedFirstPage 是在请求完第一页数据后触发的函数。
Comments
移动端加载评论的组件
> comments({
$el: $('.comments'),
apiUrl: '',
ipp: 10,
pageNum: 0,
total: 0,
threshold: 10,
currentUser: {},
// 是否禁止交互,默认为 false。如果为 true 的话,点赞回复等操作都无法进行
isInteractiveDisabled: false,
// 是否有点赞按钮
hasLikeBtn: false,
// 是否有不喜欢按钮
hasDislikeBtn: false,
// 是否有举报按钮
hasReportBtn: true,
// 是否有回复他人评论按钮
hasNestReplyBtn: false,
// 同下拉组件
parseData: data => ({
items: data.objects,
total: data.total,
}),
/*
单条评论的 data
返回的 data 如下:
{
user: {
id,
avatar,
nickname,
},
content,
created_at,
report_url,
is_voted_up,
is_voted_down,
}
*/
parseItemData: data => data,
/*
评论请求所需的数据。包含新建、编辑、回复评论
传入的 data 如下:
{
commentId, // 只有编辑的时候有
to_user_id, // 只有回复的时候有
content,
}
返回的 data 如下:
{
url,
type,
data,
...
}
*/
buildCommentApiData: data => ({ data }),
/*
点赞评论请求所需的数据。包含点赞(up)、取消点赞(delete)、不喜欢(down)
传入的 data 如下:
{
commentId,
vote, // 有三个值:up、down、delete
}
返回的 data 如下:
{
url,
type,
data,
...
}
*/
buildLikeApiData: data => ({ data }),
});
Tabs
移动端 tabs 组件
>
/*
tabs 的 html 结构如下:
.tabs
.tabs-header
.tab-title
.tab-title
.tab-title
.tabs-body
.tabs-panel
.tabs-panel
.tabs-panel
*/
new tabs({
$el: $('.tabs'),
// 初始状态的 tab 的 index,默认为 0
defaultIndex: 0,
// 切换 tab 时的回调,传递一个参数 index
onChangeTab: () => {},
});
Collapse
限制文字行数,可以展开收起文字
> initCollapse()
调用方法后,作用于所有属性里有 bay-length-limited 的元素,最大行数取决于元素里的 max-line 属性。
比如:
<div bay-length-limited max-line=2>这里有一堆文字</div>
Calendar
日历组件
> initCalendar({
$el: $('#calendar'),
// 当前显示的日期,格式不限,默认为 new Date()。比如:'2017-05'。
// 注意:如果不在 min, max 范围内,会 throw Error。
// 同 min、max 一样,计算时只考虑了年份和月份
activeDate: new Date(),
// 最小的日期,格式不限,默认为 new Date()。
min: new Date(),
// 最大的日期,格式不限,默认为 new Date()。
max: new Date(),
// 一些特殊的日期,格式不限
dates: {
primary: [],
secondary: [],
},
// 点击日期的回调,传入日期
onClickDate: () => {},
});
renderEditor
输入框
a = bayComponents.renderEditor({
defaultValue: '',
placeholder: '写点什么....',
onClose: () => true, // 返回 true关闭,返回false 无动作
onSubmit: $.noop, // this 指向 renderEditor 实例
onChange: $.noop, // this 指向 renderEditor 实例
checkboxData: {
items: [
// { title: '', checked: '', value: ''}
],
},
submitText: '发送',
});
initFlipper
bayComponents.initFlipper({
$container: $('.flipper-pages'),
$nextBtn: $('.flipper-next-btn'),
onChangePage: (pageNum) => console.log(pageNum);
});