| 
function setTimeout(instance, cb, time) { 
 | 
  if (time > 0) { 
 | 
    var s = getDate().getTime() 
 | 
    var fn = function () { 
 | 
        if (getDate().getTime() - s > time) { 
 | 
            cb && cb() 
 | 
        } else 
 | 
            instance.requestAnimationFrame(fn) 
 | 
    } 
 | 
    fn() 
 | 
  } 
 | 
  else 
 | 
    cb && cb() 
 | 
} 
 | 
  
 | 
// 判断触摸的移动方向 
 | 
function decideSwiperDirection(startTouches, currentTouches, direction) { 
 | 
  // 震动偏移容差 
 | 
  var toleranceShake = 30 
 | 
  // 移动容差 
 | 
  var toleranceTranslate = 10 
 | 
   
 | 
  if (direction === 'horizontal') { 
 | 
    // 水平方向移动 
 | 
    if (Math.abs(currentTouches.y - startTouches.y) <= toleranceShake) { 
 | 
      // console.log(currentTouches.x, startTouches.x); 
 | 
      if (Math.abs(currentTouches.x - startTouches.x) > toleranceTranslate) { 
 | 
        if (currentTouches.x - startTouches.x > 0) { 
 | 
          return 'right' 
 | 
        } else if (currentTouches.x - startTouches.x < 0) { 
 | 
          return 'left' 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } else if (direction === 'vertical') { 
 | 
    // 垂直方向移动 
 | 
    if (Math.abs(currentTouches.x - startTouches.x) <= toleranceShake) { 
 | 
      // console.log(currentTouches.x, startTouches.x); 
 | 
      if (Math.abs(currentTouches.y - startTouches.y) > toleranceTranslate) { 
 | 
        if (currentTouches.y - startTouches.y > 0) { 
 | 
          return 'down' 
 | 
        } else if (currentTouches.y - startTouches.y < 0) { 
 | 
          return 'up' 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
  return '' 
 | 
} 
 | 
  
 | 
// 更新轮播样式信息 
 | 
function updateSwiperStyle(currentTouches, instance, state) { 
 | 
  var itemData = state.itemData 
 | 
  var itemsInstance = state.itemsInstance 
 | 
  var list = state.list 
 | 
  var currentIndex = state.currentIndex 
 | 
  var touchRelactive = state.touchRelactive 
 | 
  // console.log(itemAnimationWidth); 
 | 
   
 | 
  if (itemData.direction === 'horizontal') { 
 | 
    // 水平方向 
 | 
    var itemAnimationWidth = state.itemAnimationWidth 
 | 
    // 偏移的x轴距离 
 | 
    var translateX = currentTouches.x - touchRelactive.x 
 | 
    if (currentTouches.x > itemData.windowWidth || currentTouches.x < 0) return 
 | 
    // console.log(translateX); 
 | 
    // 更新其他轮播样式 
 | 
    if (state.direction == 'left') { 
 | 
      // 设置当前激活元素的偏移量 
 | 
      instance.setStyle({ 
 | 
        'transform': 'translate3d('+ translateX + 'px, 0px, 0px)', 
 | 
        'z-index': list[currentIndex].zIndex + 1, 
 | 
        'opacity': list[currentIndex].opacity 
 | 
      }) 
 | 
      // 移动距离是否超过了指定的容器宽度 
 | 
      if (Math.abs(translateX) > itemAnimationWidth) { 
 | 
        state.itemsInstance.forEach( function(itemInstance, index) { 
 | 
          if (index != currentIndex) { 
 | 
            var preIndex = (index == 0) ? list.length - 1 : index - 1 
 | 
            var distanceRate = (Math.abs(translateX) - itemAnimationWidth) / (itemData.itemWidth - itemAnimationWidth) 
 | 
            var itemTranslateX = list[index].translateX - (list[index].translateX - list[preIndex].translateX) * distanceRate 
 | 
            var itemScale = list[index].scale + (list[preIndex].scale - list[index].scale) * distanceRate 
 | 
            var itemOpacity = list[index].opacity + (list[preIndex].opacity - list[index].opacity) * distanceRate 
 | 
            // console.log(preIndex); 
 | 
            // console.log(list[index]); 
 | 
            // console.log(distanceRate); 
 | 
            // console.log(itemTranslateX); 
 | 
            // console.log(itemScale); 
 | 
            // console.log(itemOpacity); 
 | 
            // console.log('-----------------------------------------------------------'); 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d(' + itemTranslateX + 'px, 0px, 0px) scale(' + itemScale + ')', 
 | 
              'z-index': list[index].zIndex, 
 | 
              'opacity': itemOpacity 
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } 
 | 
    } else if (state.direction == 'right') { 
 | 
      var preIndex = (currentIndex == 0) ? list.length - 1 : currentIndex - 1 
 | 
      // 右滑的时候把最底部的取出,并放到最高层级 
 | 
      state.itemsInstance[preIndex].setStyle({ 
 | 
        'transform': 'translate3d(-' + (itemData.itemWidth - translateX) + 'px, 0px, 0px) scale(1)', 
 | 
        'z-index': list[currentIndex].zIndex + 1, 
 | 
        'opacity': list[currentIndex].opacity 
 | 
      }) 
 | 
      // 当前轮播逐渐缩小 
 | 
      if (Math.abs(translateX) < itemAnimationWidth) { 
 | 
        state.itemsInstance.forEach( function(itemInstance, index) { 
 | 
          if (index != preIndex) { 
 | 
            var replaceIndex = index == list.length - 1 ? 0 : index + 1 
 | 
            var distanceRate = Math.abs(translateX) / itemAnimationWidth 
 | 
            var itemTranslateX = list[index].translateX + (list[replaceIndex].translateX - list[index].translateX) * distanceRate 
 | 
            var itemScale = list[index].scale - (list[index].scale - list[replaceIndex].scale) * distanceRate 
 | 
            var itemOpacity = list[index].opacity - (list[index].opacity - list[replaceIndex].opacity) * distanceRate 
 | 
            // console.log(preIndex); 
 | 
            // console.log(index); 
 | 
            // console.log(replaceIndex); 
 | 
            // console.log(list[index]); 
 | 
            // console.log(list[replaceIndex].translateX - list[index].translateX); 
 | 
            // console.log(distanceRate); 
 | 
            // console.log(itemTranslateX); 
 | 
            // console.log(itemScale); 
 | 
            // console.log('-----------------------------------------------------------'); 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d(' + itemTranslateX + 'px, 0px, 0px) scale(' + itemScale + ')', 
 | 
              'z-index': list[index].zIndex, 
 | 
              'opacity': itemOpacity 
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } 
 | 
    } 
 | 
  } else if (itemData.direction === 'vertical') { 
 | 
    // 垂直方向 
 | 
    var itemAnimationHeight = state.itemAnimationHeight 
 | 
    // 偏移的y轴距离 
 | 
    var translateY = currentTouches.y - touchRelactive.y 
 | 
    if (currentTouches.y > itemData.windowHeight || currentTouches.y < 0) return 
 | 
    // console.log(translateX); 
 | 
    // 更新其他轮播样式 
 | 
    if (state.direction == 'up') { 
 | 
      // 设置当前激活元素的偏移量 
 | 
      instance.setStyle({ 
 | 
        'transform': 'translate3d(0px, '+ translateY + 'px, 0px)', 
 | 
        'z-index': list[currentIndex].zIndex + 1, 
 | 
        'opacity': list[currentIndex].opacity 
 | 
      }) 
 | 
      // 移动距离是否超过了指定的容器宽度 
 | 
      if (Math.abs(translateY) > itemAnimationHeight) { 
 | 
        state.itemsInstance.forEach( function(itemInstance, index) { 
 | 
          if (index != currentIndex) { 
 | 
            var preIndex = (index == 0) ? list.length - 1 : index - 1 
 | 
            var distanceRate = (Math.abs(translateY) - itemAnimationHeight) / (itemData.itemHeight - itemAnimationHeight) 
 | 
            var itemTranslateY = list[index].translateY - (list[index].translateY - list[preIndex].translateY) * distanceRate 
 | 
            var itemScale = list[index].scale + (list[preIndex].scale - list[index].scale) * distanceRate 
 | 
            var itemOpacity = list[index].opacity + (list[preIndex].opacity - list[index].opacity) * distanceRate 
 | 
            // console.log(preIndex); 
 | 
            // console.log(list[index]); 
 | 
            // console.log(distanceRate); 
 | 
            // console.log(itemTranslateX); 
 | 
            // console.log(itemScale); 
 | 
            // console.log('-----------------------------------------------------------'); 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d(0px, ' + itemTranslateY + 'px, 0px) scale(' + itemScale + ')', 
 | 
              'z-index': list[index].zIndex, 
 | 
              'opacity': itemOpacity 
 | 
               
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } 
 | 
    } else if (state.direction == 'down') { 
 | 
      var preIndex = (currentIndex == 0) ? list.length - 1 : currentIndex - 1 
 | 
      // 下滑的时候把最底部的取出,并放到最高层级 
 | 
      state.itemsInstance[preIndex].setStyle({ 
 | 
        'transform': 'translate3d(0px, -' + (itemData.itemHeight - translateY) + 'px, 0px) scale(1)', 
 | 
        'z-index': list[currentIndex].zIndex + 1, 
 | 
        'opacity': list[currentIndex].opacity 
 | 
      }) 
 | 
      // 当前轮播逐渐缩小 
 | 
      if (Math.abs(translateY) < itemAnimationHeight) { 
 | 
        state.itemsInstance.forEach( function(itemInstance, index) { 
 | 
          if (index != preIndex) { 
 | 
            var replaceIndex = index == list.length - 1 ? 0 : index + 1 
 | 
            var distanceRate = Math.abs(translateY) / itemAnimationHeight 
 | 
            var itemTranslateY = list[index].translateY + (list[replaceIndex].translateY - list[index].translateY) * distanceRate 
 | 
            var itemScale = list[index].scale - (list[index].scale - list[replaceIndex].scale) * distanceRate 
 | 
            var itemOpacity = list[index].opacity - (list[index].opacity - list[replaceIndex].opacity) * distanceRate 
 | 
            // console.log(preIndex); 
 | 
            // console.log(index); 
 | 
            // console.log(replaceIndex); 
 | 
            // console.log(list[index]); 
 | 
            // console.log(list[replaceIndex].translateX - list[index].translateX); 
 | 
            // console.log(distanceRate); 
 | 
            // console.log(itemTranslateX); 
 | 
            // console.log(itemScale); 
 | 
            // console.log('-----------------------------------------------------------'); 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d(0px, ' + itemTranslateY + 'px, 0px) scale(' + itemScale + ')', 
 | 
              'z-index': list[index].zIndex, 
 | 
              'opacity': itemOpacity 
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
} 
 | 
  
 | 
// 更新当前轮播序号 
 | 
function updateCurrentSwiperIndex(index, ownerInstance, state) { 
 | 
  state.currentIndex = index 
 | 
  ownerInstance.callMethod('changeSwiperIndex', { 
 | 
    index: index 
 | 
  }) 
 | 
} 
 | 
  
 | 
// 切换到下一个轮播 
 | 
function switchNextSwiper(newIndex, touches, instance, state) { 
 | 
  var currentIndex = state.currentIndex 
 | 
  var list = state.list 
 | 
  var direction = state.itemData.direction 
 | 
  var touchRelactive = state.touchRelactive || {x: 0, y: 0} 
 | 
   
 | 
  // 已经完成轮播切换 
 | 
  var currentListItemData = JSON.parse(JSON.stringify(list)) 
 | 
   
 | 
  if (direction === 'horizontal') { 
 | 
    // 水平方向移动 
 | 
    var itemWidth = state.itemData.itemWidth 
 | 
    // 当前轮播移动到最左边 
 | 
    instance.setStyle({ 
 | 
      'transform': 'translate3d(-'+ itemWidth + 'px, 0px, 0px) scale(1)', 
 | 
      'z-index': list[currentIndex].zIndex + 1, 
 | 
      'opacity': list[currentIndex].opacity 
 | 
    }) 
 | 
    // 计算当前移动需要的剩余时间 
 | 
    var time = Math.floor((itemWidth - Math.abs(touches.pageX - touchRelactive.x)) / itemWidth * 250) 
 | 
     
 | 
    setTimeout(instance, function() { 
 | 
      for (var i = list.length - 1; i >= 0; i--) { 
 | 
        var replaceIndex = i - 1 < 0 ? list.length - 1 : i - 1 
 | 
        // console.log(i); 
 | 
        // console.log(replaceIndex); 
 | 
        state.itemsInstance[i].setStyle({ 
 | 
          'transform': 'translate3d('+ currentListItemData[replaceIndex].translateX + 'px, 0px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')', 
 | 
          'z-index': currentListItemData[replaceIndex].zIndex, 
 | 
          'opacity': currentListItemData[replaceIndex].opacity 
 | 
        }) 
 | 
        state.list[i] = currentListItemData[replaceIndex] 
 | 
      } 
 | 
    }, time) 
 | 
  } else if (direction === 'vertical') { 
 | 
    // 垂直方向移动 
 | 
    var itemHeight = state.itemData.itemHeight 
 | 
    // 当前轮播移动到最上边 
 | 
    instance.setStyle({ 
 | 
      'transform': 'translate3d(0px, -'+ itemHeight + 'px, 0px) scale(1)', 
 | 
      'z-index': list[currentIndex].zIndex + 1, 
 | 
      'opacity': list[currentIndex].opacity 
 | 
    }) 
 | 
    // 计算当前移动需要的剩余时间 
 | 
    var time = Math.floor((itemHeight - Math.abs(touches.pageY - touchRelactive.y)) / itemHeight * 250) 
 | 
     
 | 
    setTimeout(instance, function() { 
 | 
      for (var i = list.length - 1; i >= 0; i--) { 
 | 
        var replaceIndex = i - 1 < 0 ? list.length - 1 : i - 1 
 | 
        // console.log(i); 
 | 
        // console.log(replaceIndex); 
 | 
        state.itemsInstance[i].setStyle({ 
 | 
          'transform': 'translate3d(0px, '+ currentListItemData[replaceIndex].translateY + 'px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')', 
 | 
          'z-index': currentListItemData[replaceIndex].zIndex, 
 | 
          'opacity': currentListItemData[replaceIndex].opacity 
 | 
        }) 
 | 
        state.list[i] = currentListItemData[replaceIndex] 
 | 
      } 
 | 
    }, time) 
 | 
  } 
 | 
} 
 | 
  
 | 
// 切换到上一个轮播 
 | 
function switchPrevSwiper(newIndex, touches, instance, state) { 
 | 
  var currentIndex = state.currentIndex 
 | 
  var list = state.list 
 | 
  var direction = state.itemData.direction 
 | 
  var touchRelactive = state.touchRelactive || {x: 0, y: 0} 
 | 
   
 | 
  var currentListItemData = JSON.parse(JSON.stringify(list)) 
 | 
   
 | 
  if (direction === 'horizontal') { 
 | 
    // 水平方向移动 
 | 
    var itemWidth = state.itemData.itemWidth 
 | 
    // 当前上一个轮播移动到正常位置 
 | 
    state.itemsInstance[newIndex].setStyle({ 
 | 
      'transform': 'translate3d(0px, 0px, 0px) scale(1)', 
 | 
      'z-index': list[currentIndex].zIndex + 1, 
 | 
      'opacity': list[currentIndex].opacity 
 | 
    }) 
 | 
    // 计算当前移动需要的剩余时间 
 | 
    var time = Math.floor((itemWidth - Math.abs(touches.pageX - touchRelactive.x)) / itemWidth * 250) 
 | 
    // 更新除当前上一个轮播外的其他轮播,向后移动一个层级 
 | 
    // 更新列表位置相关数据 
 | 
    setTimeout(instance, function() { 
 | 
      for (var i = 0; i < list.length; i++) { 
 | 
        var replaceIndex = (i + 1 > list.length - 1) ? 0 : i + 1 
 | 
        state.itemsInstance[i].setStyle({ 
 | 
          'transform': 'translate3d('+ currentListItemData[replaceIndex].translateX + 'px, 0px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')', 
 | 
          'z-index': currentListItemData[replaceIndex].zIndex, 
 | 
          'opacity': currentListItemData[replaceIndex].opacity 
 | 
        }) 
 | 
        state.list[i] = currentListItemData[replaceIndex] 
 | 
      } 
 | 
    }, time) 
 | 
  } else if (direction === 'vertical') { 
 | 
    // 垂直方向移动 
 | 
    var itemHeight = state.itemData.itemHeight 
 | 
    // 当前上一个轮播移动到正常位置 
 | 
    state.itemsInstance[newIndex].setStyle({ 
 | 
      'transform': 'translate3d(0px, 0px, 0px) scale(1)', 
 | 
      'z-index': list[currentIndex].zIndex + 1, 
 | 
      'opacity': list[currentIndex].opacity 
 | 
    }) 
 | 
    // 计算当前移动需要的剩余时间 
 | 
    var time = Math.floor((itemHeight - Math.abs(touches.pageY - touchRelactive.y)) / itemHeight * 250) 
 | 
    // 更新除当前上一个轮播外的其他轮播,向后移动一个层级 
 | 
    // 更新列表位置相关数据 
 | 
    setTimeout(instance, function() { 
 | 
      for (var i = 0; i < list.length; i++) { 
 | 
        var replaceIndex = (i + 1 > list.length - 1) ? 0 : i + 1 
 | 
        state.itemsInstance[i].setStyle({ 
 | 
          'transform': 'translate3d(0px, '+ currentListItemData[replaceIndex].translateY + 'px, 0px) scale(' + currentListItemData[replaceIndex].scale + ')', 
 | 
          'z-index': currentListItemData[replaceIndex].zIndex, 
 | 
          'opacity': currentListItemData[replaceIndex].opacity 
 | 
        }) 
 | 
        state.list[i] = currentListItemData[replaceIndex] 
 | 
      } 
 | 
    }, time) 
 | 
  } 
 | 
} 
 | 
  
 | 
// 反转动画 
 | 
function toggleSwiperAnimation(state, add) { 
 | 
  if (!state.itemsInstance) return 
 | 
  if (add === true) { 
 | 
    state.itemsInstance.forEach(function(item, index) { 
 | 
      if (!item.hasClass('tn-stack-swiper__item__transition')) { 
 | 
        item.addClass('tn-stack-swiper__item__transition') 
 | 
      } 
 | 
    }) 
 | 
  } else { 
 | 
    state.itemsInstance.forEach(function(item, index) { 
 | 
      if (item.hasClass('tn-stack-swiper__item__transition')) { 
 | 
        item.removeClass('tn-stack-swiper__item__transition') 
 | 
      } 
 | 
    }) 
 | 
  } 
 | 
} 
 | 
  
 | 
// 更新数据 
 | 
var itemDataObserver = function (newVal, oldVal, ownerInstance, instance) { 
 | 
  var state = ownerInstance.getState() 
 | 
  state.itemData = newVal 
 | 
} 
 | 
  
 | 
// 列表初始化 
 | 
var listObserver = function(newVal, oldVal, ownerInstance, instance) { 
 | 
  var state = ownerInstance.getState() 
 | 
  var itemData = state.itemData 
 | 
  state.itemsInstance = ownerInstance.selectAllComponents('.tn-stack-swiper__item') 
 | 
   
 | 
  state.list = newVal || [] 
 | 
   
 | 
  state.list.forEach(function(item, index) { 
 | 
    var itemInstance = state.itemsInstance[index] 
 | 
    if (item && itemInstance) { 
 | 
      if (itemData.direction === 'horizontal') { 
 | 
        itemInstance.setStyle({ 
 | 
          'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')', 
 | 
          'z-index': item.zIndex, 
 | 
          'opacity': item.opacity 
 | 
        }) 
 | 
      } else if (itemData.direction === 'vertical') { 
 | 
        itemInstance.setStyle({ 
 | 
          'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')', 
 | 
          'z-index': item.zIndex, 
 | 
          'opacity': item.opacity 
 | 
        }) 
 | 
      } 
 | 
    } 
 | 
  }) 
 | 
} 
 | 
  
 | 
// 切换轮播位置 
 | 
var swiperIndexChange = function(newVal, oldVal, ownerInstance, instance) { 
 | 
  var state = ownerInstance.getState()   
 | 
  // console.log(newVal); 
 | 
  // ownerInstance.callMethod('printLog', newVal) 
 | 
  // console.log(oldVal); 
 | 
  // ownerInstance.callMethod('printLog', oldVal) 
 | 
  // 排除第一次初始化和手动切换的情况 
 | 
  if (oldVal < 0 || typeof oldVal == 'undefined' || state.currentIndex == newVal) { 
 | 
    if (oldVal < 0 || typeof oldVal == 'undefined') { 
 | 
      state.currentIndex = 0 
 | 
    } 
 | 
    return 
 | 
  } 
 | 
  state.currentIndex = newVal 
 | 
  // console.log(state.currentIndex); 
 | 
  if (newVal > oldVal || (oldVal == state.list.length - 1 && newVal == 0)) { 
 | 
    // console.log("next"); 
 | 
    // state.itemsInstance.forEach(function(item, index) { 
 | 
    //   item.addClass("tn-stack-swiper__item__transition") 
 | 
    // }) 
 | 
    switchNextSwiper(newVal, { 
 | 
      pageX: 0 
 | 
    }, state.itemsInstance[oldVal], state) 
 | 
  } else if (newVal < oldVal || (oldVal == 0 && newVal == state.list.length - 1)) { 
 | 
    // console.log("prev"); 
 | 
  } 
 | 
} 
 | 
  
 | 
// 自动轮播切换状态 
 | 
var autoplayFlagChange = function(newVal, oldVal, ownerInstance, instance) { 
 | 
  var state = ownerInstance.getState() 
 | 
   
 | 
  if (newVal === true) { 
 | 
    toggleSwiperAnimation(state, true) 
 | 
  } else { 
 | 
    toggleSwiperAnimation(state, false) 
 | 
  } 
 | 
} 
 | 
  
 | 
// 开始触摸 
 | 
var touchStart = function (event, ownerInstance) { 
 | 
  // console.log('touchStart'); 
 | 
  var instance = event.instance 
 | 
  var dataset = instance.getDataset() 
 | 
  var state = ownerInstance.getState() 
 | 
   
 | 
  var itemData = state.itemData 
 | 
   
 | 
  // 判断是否为为当前显示的轮播 
 | 
  if (dataset.index != state.currentIndex) return 
 | 
   
 | 
  var touches = event.changedTouches[0] 
 | 
  if (!touches) return 
 | 
   
 | 
  // 记录当前滑动开始的x,y坐标 
 | 
  state.touchRelactive = { 
 | 
    x: touches.pageX, 
 | 
    y: touches.pageY 
 | 
  } 
 | 
  // 记录触摸id,用于处理多指的情况 
 | 
  state.touchId = touches.identifier 
 | 
   
 | 
  if (itemData.direction === 'horizontal') { 
 | 
    // 水平方向移动 
 | 
    // 设置左右滑动时相对偏移距离 
 | 
    state.itemAnimationWidth = itemData.itemWidth * (dataset.switchrate / 100) 
 | 
  } else if (itemData.direction === 'vertical') { 
 | 
    // 垂直方向移动 
 | 
    // 设置上下滑动时相对偏移距离 
 | 
    state.itemAnimationHeight = itemData.itemHeight * (dataset.switchrate / 100) 
 | 
  } 
 | 
   
 | 
  // 移除运动动画时间 
 | 
  toggleSwiperAnimation(state, false) 
 | 
   
 | 
  // 标记开始触摸 
 | 
  state.touching = true 
 | 
  ownerInstance.callMethod('changeTouchState', { 
 | 
    touching: true 
 | 
  }) 
 | 
  // 停止执行自动轮播 
 | 
  ownerInstance.callMethod('clearAutoPlayTimer') 
 | 
} 
 | 
  
 | 
// 开始移动 
 | 
var touchMove = function (event, ownerInstance) { 
 | 
  // console.log('touchMove'); 
 | 
  var instance = event.instance 
 | 
  var dataset = instance.getDataset() 
 | 
  var state = ownerInstance.getState() 
 | 
  var itemData = state.itemData 
 | 
   
 | 
  // 判断是否为为当前显示的轮播 
 | 
  if (dataset.index != state.currentIndex) return 
 | 
   
 | 
  // 还没开始触摸直接返回 
 | 
  if (!state.touching) return 
 | 
   
 | 
  var touches = event.changedTouches[0] 
 | 
  if (!touches) return 
 | 
   
 | 
  // 判断是否为同一个触摸点 
 | 
  if (state.touchId != touches.identifier) return 
 | 
   
 | 
  var currentTouchRelactive = { 
 | 
    x: touches.pageX, 
 | 
    y: touches.pageY 
 | 
  } 
 | 
  // 是否已经确定了移动方向 
 | 
  if (!state.direction) { 
 | 
    state.direction = decideSwiperDirection(state.touchRelactive, currentTouchRelactive, itemData.direction) 
 | 
  } 
 | 
  // console.log(decideSwiperDirection(state.touchRelactive, currentTouchRelactive)); 
 | 
  updateSwiperStyle(currentTouchRelactive, instance, state) 
 | 
} 
 | 
  
 | 
// 移动结束 
 | 
var touchEnd = function (event, ownerInstance) { 
 | 
  // console.log('touchEnd'); 
 | 
  var instance = event.instance 
 | 
  var dataset = instance.getDataset() 
 | 
  var state = ownerInstance.getState() 
 | 
  var itemData = state.itemData 
 | 
  var list = state.list 
 | 
  var touchRelactive = state.touchRelactive 
 | 
   
 | 
  // 判断是否为为当前显示的轮播 
 | 
  if (dataset.index != state.currentIndex) return 
 | 
   
 | 
  // 还没开始触摸直接返回 
 | 
  if (!state.touching) return 
 | 
   
 | 
  var touches = event.changedTouches[0] 
 | 
  if (!touches) return 
 | 
   
 | 
  // 判断是否为同一个触摸点 
 | 
  if (state.touchId != touches.identifier) return 
 | 
   
 | 
  // 添加运动动画时间 
 | 
  toggleSwiperAnimation(state, true) 
 | 
   
 | 
  if (itemData.direction === 'horizontal') { 
 | 
    // 水平方向移动 
 | 
    var itemAnimationWidth = state.itemAnimationWidth 
 | 
    // 判断时左滑还是右滑 
 | 
    // 判断是否超过自动滚动到下一页还是回滚 
 | 
    if (state.direction == 'left') { 
 | 
      if (Math.abs(touches.pageX - touchRelactive.x) < itemAnimationWidth) { 
 | 
        list.forEach(function(item, index) { 
 | 
          var itemInstance = state.itemsInstance[index] 
 | 
          if (item && itemInstance) { 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')', 
 | 
              'z-index': item.zIndex 
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } else { 
 | 
        var newIndex = state.currentIndex + 1 > list.length - 1 ? 0 : state.currentIndex + 1 
 | 
        switchNextSwiper(newIndex, touches, instance, state) 
 | 
         
 | 
        updateCurrentSwiperIndex(newIndex, ownerInstance, state) 
 | 
      } 
 | 
    } else if (state.direction == 'right') { 
 | 
      if (Math.abs(touches.pageX - touchRelactive.x) < itemAnimationWidth) { 
 | 
        // 滑动显示图片回滚 
 | 
        var preIndex = (state.currentIndex == 0) ? list.length - 1 : state.currentIndex - 1 
 | 
        state.itemsInstance[preIndex].setStyle({ 
 | 
          'transform': 'translate3d(-' + itemData.itemWidth + 'px, 0px, 0px) scale(1)', 
 | 
          'z-index': list[state.currentIndex].zIndex + 1, 
 | 
          'opacity': list[state.currentIndex].opacity 
 | 
        }) 
 | 
        list.forEach(function(item, index) { 
 | 
          var itemInstance = state.itemsInstance[index] 
 | 
          if (item && itemInstance) { 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d('+ item.translateX + 'px, 0px, 0px) scale(' + item.scale + ')', 
 | 
              'z-index': item.zIndex, 
 | 
              'opacity': item.opacity 
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } else { 
 | 
        var newIndex = (state.currentIndex - 1 < 0) ? list.length - 1 : state.currentIndex - 1 
 | 
        switchPrevSwiper(newIndex, touches, instance, state) 
 | 
         
 | 
        updateCurrentSwiperIndex(newIndex, ownerInstance, state) 
 | 
      } 
 | 
    } 
 | 
  } else if (itemData.direction === 'vertical') { 
 | 
    // 垂直方向移动 
 | 
    var itemAnimationHeight = state.itemAnimationHeight 
 | 
    // 判断时上滑还是下滑 
 | 
    // 判断是否超过自动滚动到下一页还是回滚 
 | 
    if (state.direction == 'up') { 
 | 
      if (Math.abs(touches.pageY - touchRelactive.y) < itemAnimationHeight) { 
 | 
        list.forEach(function(item, index) { 
 | 
          var itemInstance = state.itemsInstance[index] 
 | 
          if (item && itemInstance) { 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')', 
 | 
              'z-index': item.zIndex, 
 | 
              'opacity': item.opacity 
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } else { 
 | 
        var newIndex = state.currentIndex + 1 > list.length - 1 ? 0 : state.currentIndex + 1 
 | 
        switchNextSwiper(newIndex, touches, instance, state) 
 | 
         
 | 
        updateCurrentSwiperIndex(newIndex, ownerInstance, state) 
 | 
      } 
 | 
    } else if (state.direction == 'down') { 
 | 
      if (Math.abs(touches.pageY - touchRelactive.y) < itemAnimationHeight) { 
 | 
        // 滑动显示图片回滚 
 | 
        var preIndex = (state.currentIndex == 0) ? list.length - 1 : state.currentIndex - 1 
 | 
        state.itemsInstance[preIndex].setStyle({ 
 | 
          'transform': 'translate3d(0px, -' + itemData.itemHeight + 'px, 0px) scale(1)', 
 | 
          'z-index': list[state.currentIndex].zIndex + 1, 
 | 
          'opacity': list[state.currentIndex].opacity 
 | 
        }) 
 | 
        list.forEach(function(item, index) { 
 | 
          var itemInstance = state.itemsInstance[index] 
 | 
          if (item && itemInstance) { 
 | 
            itemInstance.setStyle({ 
 | 
              'transform': 'translate3d(0px, '+ item.translateY + 'px, 0px) scale(' + item.scale + ')', 
 | 
              'z-index': item.zIndex, 
 | 
              'opacity': item.opacity 
 | 
            }) 
 | 
          } 
 | 
        }) 
 | 
      } else { 
 | 
        var newIndex = (state.currentIndex - 1 < 0) ? list.length - 1 : state.currentIndex - 1 
 | 
        switchPrevSwiper(newIndex, touches, instance, state) 
 | 
         
 | 
        updateCurrentSwiperIndex(newIndex, ownerInstance, state) 
 | 
      } 
 | 
    } 
 | 
  } 
 | 
   
 | 
  // 清除对应的标志位 
 | 
  state.touchRelactive = null 
 | 
  state.touching = false 
 | 
  state.direction = null 
 | 
  state.touchId = null 
 | 
   
 | 
  ownerInstance.callMethod('changeTouchState', { 
 | 
    touching: false 
 | 
  }) 
 | 
  // 重新开始执行自动轮播 
 | 
  ownerInstance.callMethod('setAutoPlay') 
 | 
} 
 | 
  
 | 
module.exports = { 
 | 
  itemDataObserver: itemDataObserver, 
 | 
  listObserver: listObserver, 
 | 
  swiperIndexChange: swiperIndexChange, 
 | 
  autoplayFlagChange: autoplayFlagChange, 
 | 
  touchStart: touchStart, 
 | 
  touchMove: touchMove, 
 | 
  touchEnd: touchEnd 
 | 
} 
 |