123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657 |
- 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
- }
|