var max = 200
							 | 
						|
								var refreshHeight = 80
							 | 
						|
								function 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
							 | 
						|
								}
							 |