XScroll 是移动端web高性能模拟滚动解决方案,包含节点回收、下拉刷新、上拉加载等功能。
config:
config
renderTo 渲染节点,内部需要包含class为xs-container,xs-content两个容器
renderTo
height 外容器视窗高度
height
width 外容器视窗宽度
width
containerHeight 内容器高度
containerHeight
containerWidth 内容器宽度
containerWidth
scrollbarX 是否开启横向滚动条
scrollbarX
scrollbarY 是否开启纵向滚动条
scrollbarY
lockX 是否锁定横向滚动
lockX
lockY 是否锁定纵向滚动
lockY
gpuAcceleration 是否开启GPU硬件加速(在性能提升的同时需要注意内存控制)
gpuAcceleration
enableGPUAcceleration() 开启硬件加速
enableGPUAcceleration()
disableGPUAcceleration() 开启硬件加速
disableGPUAcceleration()
getOffset() 获取水平和垂直偏移量,如:{x:0,y:100}
getOffset()
getOffsetTop() 获取垂直偏移量
getOffsetTop()
getOffsetLeft() 获取水平偏移量
getOffsetLeft()
scrollTo(offset, duration, easing, callback) 滚动到某处 offset必须为{x:a,y:b}格式。
scrollTo(offset, duration, easing, callback)
scrollX(x, duration, easing, callback) 水平滚动到某处
scrollX(x, duration, easing, callback)
scrollY(y, duration, easing, callback) 垂直滚动到某处
scrollY(y, duration, easing, callback)
bounce(enable,callback) 手动触发边缘回弹
bounce(enable,callback)
on(event,handler) 监听某个事件
on(event,handler)
fire(event) 触发某个事件
fire(event)
detach(event,[handler]) 移除某个事件
detach(event,[handler])
plug(plugin) 绑定插件
plug(plugin)
unplug(pluginId|plugin) 移除某插件
unplug(pluginId|plugin)
getPlugin(pluginId) 获取某个插件
getPlugin(pluginId)
extand XScroll
renderHook 逐行渲染的function,和传入的data相关联
renderHook
itemHeight 默认每行行高,如果data中有定义,则该属性被覆盖
itemHeight
data 页面的数据,为一个Array,数组中每个对象必须为{data:{},style:{},recycled:false} 的格式,其中data代表真实数据,style代表样式,recycled代表当前行dom是否需要回收
data
appendDataSet(dataset) 添加一个数据集合
appendDataSet(dataset)
removeDataSet(datasetId) 移除一个数据集合
removeDataSet(datasetId)
getDataSets() 获取所有数据集合
getDataSets()
getDataSetById(datasetId) 根据集合ID获取数据集合
getDataSetById(datasetId)
getCellByPageY(pageY) 根据视图坐标位置获取当前行单元
getCellByPageY(pageY)
getCellByRow(row) 根据行号获取当前单元
getCellByRow(row)
getCellByOffsetY(offsetY) 根据当前滚动容器的offsetTop值获取当前单元
getCellByOffsetY(offsetY)
insertData(datasetIndex,rowIndex,data) 插入某组数据,插入位置为第datasetIndex组,第rowIndex行
insertData(datasetIndex,rowIndex,data)
getData(datasetIndex,rowIndex)
updateData(datasetIndex,rowIndex,data)
removeData(datasetIndex,rowIndex)
_getDomInfo()
Example:
var xlist = new XList({ //set configs here }) var dataset = new XList.DataSet({ id:"section1", data:[ { data:{ name:"Jack" } }, { data:{ name:"Tom" } } ] }); //appendTo Xlist xlist.appendDataSet(dataset); //reflow xlist.render();
id 唯一ID,可省略
id
data 传入数据
appendData(data) 追加数据
appendData(data)
insertData(index,data) 插入数据至某处
insertData(index,data)
removeData(index) 删除数据
removeData(index)
getData(index) 获取数据,参数为空则所有数据
getData(index)
setId(datasetId) 设置ID
setId(datasetId)
getId() 获取ID
getId()
var xlist = new XList(); // or XScroll.Plugin.PullDown var pulldown = new XList.Plugin.PullDown(); //plug xlist.plug(pulldown); xlist.render();
content 内容,若需要使用动画进行如上下箭头切换,则配置此项
content
downContent 下拉前展示的内容,默认为’Pull Down To Refresh’
downContent
upContent 松手展示内容,默认为’Release To Refresh’
upContent
loadingContent 加载中展示内容,默认为’Loading…’
loadingContent
prefix class前缀,默认为’xs-plugin-pulldown-‘
prefix
height 进行下拉和松手以及加载状态切换的高度,默认60
setContent(html) 改变数据
setContent(html)
reset(callback) 数据加载完毕后,通知控件进行回弹
reset(callback)
on("loading",fn) 监听loading事件,进行异步请求等逻辑
on("loading",fn)
var xlist = new XList(); var pullup = new XList.Plugin.PullUp(); //plug xlist.plug(pullup); xlist.render(); pullup.on("loading",function(){ // get remote data getData(); }); var page = 1, totalPage = 10; function getData(){ // $.ajax({ url:"demo.php", dataType:"json", callback:function(data){ if(page > totalPage) { //last page pullup.reset(); //destroy plugin xlist.unplug(pullup); return; }; ds.appendData(data); xlist.render(); //loading complate pullup.complete(); page++; } }) }
content 内容,同PullDown
upContent 下拉前展示的内容,默认为’Pull Up To Refresh’
downContent 松手展示内容,默认为’Release To Refresh’
prefix class前缀,默认为’xs-plugin-pullup-‘
height 加载状态时底部被拓展的边界高度,默认40
pullUpHeight up和down切换的高度,默认80
pullUpHeight
complete() 加载结束后恢复上拉控件的状态至’up’
complete()
var xlist = new XList({ renderTo: "#J_Scroll", data: data, itemHeight: 62 , infiniteElements:"#J_Scroll .xs-row", renderHook:function(el,row){ el.innerHTML = '<div class="lbl">'+row.data.text+'</div>'+ '<div class="control"><div class="btn btn-mark">mark</div>'+ '<div class="btn btn-delete">delete</div></div>'; } }); var swipeEditPlugin = new XList.Plugin.SwipeEdit({ labelSelector:".lbl", width:maxWidth }); xlist.plug(swipeEditPlugin); xlist.on("click",function(e){ //delete if(e.target.className.match("btn-delete")){ xlist.removeData(0,e.cell._row) xlist.render(); } //mark if(e.target.className.match("btn-mark") && !e.target.className.match("btn-marked")){ var data = xlist.getData(0,e.cell._row) data.data.marked = true; e.target.className += " btn-marked"; } }) xlist.on("click", function(e) { //hide the buttons if(!e.target.parentNode.className.match('control')){ swipeEditPlugin.slideAllExceptRow(); } }); xlist.render();
labelSelector 操作栏的类选择器,如’.lbl’
labelSelector
width 操作栏总宽度