纸通宝小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

124 lines
3.8 KiB

/**
* 下拉刷新的控制
*/
var startmark = 0; // 开始触摸屏幕的位置
var newmark = 0; // 当前移动到的位置
var maxDistance = 75; // 下拉最大距离(单位px)
var triggered = false; // 当前下拉刷新状态,true表示下拉刷新已经被触发,false表示下拉刷新未被触发
/**
* 手指触摸动作开始
*/
var touchStart = function(e, instance) {
var scrollTop = e.instance.getDataset().scrolltop;
// 当前处于顶部并且没有处于刷新状态
if (scrollTop && !triggered) {
startmark = e.touches[0].pageY;
} else {
return;
}
}
/**
* 手指触摸后移动
*/
var touchMove = function(e, instance) {
var scrollTop = e.instance.getDataset().scrolltop;
var circleProgressBarHeight = e.instance.getDataset().progressbarheight;
// 当前处于顶部并且没有处于刷新状态
if (scrollTop && !triggered) {
newmark = e.touches[0].pageY;
if (newmark < startmark) {
//
instance.selectComponent('.circle-progress-bar').setStyle({ 'transform': 'none' })
instance.selectComponent('.icon-shuaxin').setStyle({ 'transform': 'none', 'opacity': 0 })
} else if (newmark - startmark > maxDistance + circleProgressBarHeight) {
// 达到最大滑动距离
instance.selectComponent('.circle-progress-bar').setStyle({
'transform': 'translateY(' + (maxDistance + circleProgressBarHeight) + 'px)'
});
instance.selectComponent('.icon-shuaxin').setStyle({
'transform': 'rotate(270deg)',
'opacity': 1
});
} else {
// 向下滑动,未到达最大滑动距离
instance.selectComponent('.circle-progress-bar').setStyle({
'transform': 'translateY(' + (newmark - startmark) + 'px)'
});
// 计算加载进度条的透明度,当滑动距离为最大滑动距离的一半时opacity为1
var opacity = 0;
if (newmark - startmark <= (maxDistance + circleProgressBarHeight) / 2) {
opacity = 1 * (newmark - startmark) / (maxDistance + circleProgressBarHeight);
} else {
opacity = 1;
}
instance.selectComponent('.icon-shuaxin').setStyle({
'transform': 'rotate(' + 270 * (newmark - startmark) / (maxDistance + circleProgressBarHeight) + 'deg)',
'opacity': opacity
});
}
} else {
return
}
}
/**
* 手指触摸动作结束
*/
var touchEnd = function(e, instance) {
var scrollTop = e.instance.getDataset().scrolltop;
var threshold = e.instance.getDataset().threshold;
// 当前处于顶部并且没有处于刷新状态
if (scrollTop && !triggered) {
if (newmark - startmark < (threshold + 40)) {
// 滑动距离未达到阈值(这里的40为加载圈高度),回到原位
startmark = 0;
newmark = 0;
instance.selectComponent('.circle-progress-bar').setStyle({
'transform': 'none',
'opacity': 0,
'transition-duration': '0.6s'
});
} else {
// 滑动距离达到阈值,触发刷新
startmark = 0;
newmark = 0;
instance.selectComponent('.circle-progress-bar').setStyle({
'transform': 'none',
'opacity': 0
});
instance.callMethod('setRefresh', true);
}
} else {
return;
}
}
/**
* 手指触摸动作被打断,如来电提醒,弹窗
*/
var touchCancel = function(e, instance) {
// 回到原位
startmark = 0;
newmark = 0;
instance.selectComponent('.circle-progress-bar').setStyle({
'transform': 'none',
'opacity': 0
});
}
/**
* 刷新状态变化监听
*/
var refreshStateChange = function(newValue, oldValue, ownerInstance, ins) {
triggered = newValue;
}
module.exports = {
touchStart: touchStart,
touchMove: touchMove,
touchEnd: touchEnd,
touchCancel: touchCancel,
refreshStateChange: refreshStateChange
}