|                                                                                                                    |  | var max = 200var refreshHeight = 80function touchstart(event, ins) {	console.log('touchstart');	var state = ins.getState()	if ( state.refresh ) return	var touch = event.touches[0] || event.changedTouches[0]	state.startX = touch.pageX	state.startY = touch.pageY}function touchmove(event, ins) {	console.log('touchmove');	var state = ins.getState()	if ( state.refresh ) return	if ( state.startY > 0) {		var touch = event.touches[0] || event.changedTouches[0]		if ((Math.abs(touch.pageY - state.startY) > Math.abs(touch.pageX - state.startX)) && Math.abs(touch.pageY - state.startY) > 20) {			var pageY = touch.pageY			var rate = max / (max + Math.abs(pageY - state.startY))			state.threshold = rate * (pageY - state.startY)			if ( state.threshold > 0 && !state.pulldownable ) return			if ( state.threshold < 0 && !state.pullupable ) return			if ( state.threshold > max ) {				state.threshold = max			}			if ( state.threshold < -max ) {				state.threshold = -max			}			ins.selectComponent('.yingbing-scroller-wrapper').setStyle({				transform: 'translateY(' + state.threshold + 'px)',				transition: ''			})			if ( state.threshold > 0 ) {				ins.callMethod('pullingdown', state.threshold)			} else {				ins.callMethod('pullingup', Math.abs(state.threshold))			}		}	}}function touchend(event, ins) {	touchaction(event, ins)}function touchcancel(event, ins) {	touchaction(event, ins)}function touchaction (event, ins) {	var state = ins.getState()	if ( state.refresh ) return	if ( state.threshold > 0 && state.pulldownable ) {//下拉		if ( state.threshold > refreshHeight ) {//满足下拉条件			ins.selectComponent('.yingbing-scroller-wrapper').setStyle({				transform: 'translateY(' + refreshHeight + 'px)',				transition: 'transform .1s'			})			ins.callMethod('pulldown')			state.refresh = true		} else {//不满足下拉条件恢复样式			stop(ins)		}	}	if ( state.threshold < 0 && state.pullupable ) {//上拉		if ( Math.abs(state.threshold) > refreshHeight ) {//满足上拉条件			ins.selectComponent('.yingbing-scroller-wrapper').setStyle({				transform: 'translateY(-' + refreshHeight + 'px)',				transition: 'transform .1s'			})			ins.callMethod('pullup')			state.refresh = true		} else {//不满足上拉条件恢复样式			stop(ins)		}	}}function stop (ins) {	var state = ins.getState()	ins.selectComponent('.yingbing-scroller-wrapper').setStyle({		transform: 'translateY(0)',		transition: 'transform .1s'	})	state.threshold = 0	state.startY = 0	state.refresh = false}function refreshStateWatcher (newVal, oldVal, ins) {	if ( newVal == 'pulldown' ) {		var state = ins.getState()		state.threshold = refreshHeight + 1		state.refresh = false		touchaction(null, ins)	}	if ( newVal == 'pullup' ) {		var state = ins.getState()		state.threshold = -(refreshHeight + 1)		state.refresh = false		touchaction(null, ins)	}	if ( newVal == 'stop' ) stop(ins)}function pulldownableWatcher (newVal, oldVal, ins) {	var state = ins.getState()	if ( state ) state.pulldownable = newVal}function pullupableWatcher (newVal, oldVal, ins) {	var state = ins.getState()	if ( state ) state.pullupable = newVal}module.exports = {	refreshStateWatcher: refreshStateWatcher,	pulldownableWatcher: pulldownableWatcher,	pullupableWatcher: pullupableWatcher,	touchstart: touchstart,	touchmove: touchmove,	touchend: touchend,	touchcancel: touchcancel}
 |