140 lines
4.2 KiB
XML
140 lines
4.2 KiB
XML
function log(t) {
|
|
// log(t);
|
|
}
|
|
|
|
function transition(e, ins) {
|
|
var line = ins.selectComponent('#line');
|
|
var swiper = ins.selectComponent('#swiper');
|
|
var dataset = swiper.getDataset();
|
|
dataset = str2Obj(dataset);
|
|
var windowwidth = parseFloat(dataset.windowwidth);
|
|
log('dataset:' + JSON.stringify(dataset));
|
|
var tabsinfo = dataset.tabsinfo || [];
|
|
tabsinfo = str2Obj(tabsinfo);
|
|
var current = parseInt(dataset.current) || 0;
|
|
log('current:' + current);
|
|
var tab = tabsinfo[current];
|
|
tab = str2Obj(tab);
|
|
if(tab) {
|
|
log('tab:' + JSON.stringify(tab));
|
|
var curTabDx = (parseFloat(tab.left) + (parseFloat(tab.width)/2));
|
|
log('curTabDx:' + curTabDx);
|
|
var newDx = e.detail.dx;
|
|
var nextCurrent = newDx>0?current+1:current-1;
|
|
log('nextCurrent:' + nextCurrent);
|
|
|
|
var nextTab = tabsinfo[nextCurrent];
|
|
nextTab = str2Obj(nextTab);
|
|
var nextDx;
|
|
if(nextTab) {
|
|
nextDx = nextTab.left + nextTab.width/2;
|
|
}else{
|
|
nextDx = newDx>0?(curTabDx + 200): (curTabDx - 200);
|
|
}
|
|
log('nextDx:' + nextDx);
|
|
log('windowwidth:' + windowwidth);
|
|
log('newDx:' + newDx);
|
|
var dxScale = Math.abs(newDx)/windowwidth;
|
|
log('dxScale:' + dxScale);
|
|
var newScaleDx = (nextDx - curTabDx)*dxScale;
|
|
log('newScaleDx:' + newScaleDx);
|
|
var moveDx = (curTabDx + newScaleDx);
|
|
log('moveDx:' + moveDx);
|
|
var lineWidth = dataset.linewidth;
|
|
lineWidth = parseFloat(lineWidth);
|
|
log('lineWidth:' +lineWidth);
|
|
lineWidth = lineWidth>1?lineWidth:tab.width*lineWidth;
|
|
var setDx = (moveDx - lineWidth/2);
|
|
line.setStyle({
|
|
'transform': 'translateX(' + setDx + 'px)'
|
|
})
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function tabsInfoChange(n, o, ins) {
|
|
var swiper = ins.selectComponent('#swiper');
|
|
var dataset = swiper.getDataset();
|
|
var tabsInfoChangeBl = dataset.tabsinfochangebl;
|
|
if(tabsInfoChangeBl === 'true' || tabsInfoChangeBl === true){
|
|
ins.callMethod('setTabsInfoChangeBl');
|
|
setCurDx(ins, false, true, false);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function animationfinish(e, ins) {
|
|
log('触发了animationfinish方法:' + e.detail.current);
|
|
setCurDx(ins, e.detail.current, false);
|
|
ins.callMethod('setCurrent', e.detail);
|
|
return false;
|
|
}
|
|
|
|
function swiperChange(e, ins) {
|
|
log('触发了swiperChange方法:' + e.detail.current);
|
|
setCurDx(ins, e.detail.current, false, false);
|
|
ins.callMethod('setSwiperCurrent', e.detail);
|
|
return false;
|
|
}
|
|
|
|
function setCurDx(ins, current, tabsChange, changeLineDx) {
|
|
var swiper = ins.selectComponent('#swiper');
|
|
var dataset = swiper.getDataset();
|
|
dataset = str2Obj(dataset);
|
|
log('dataset:' + JSON.stringify(dataset));
|
|
var line = ins.selectComponent('#line');
|
|
var tabsinfo = dataset.tabsinfo || [];
|
|
tabsinfo = str2Obj(tabsinfo);
|
|
var current = parseInt(current!==false?current:(dataset.current || 0));
|
|
var tab = tabsinfo[current];
|
|
tab = str2Obj(tab);
|
|
log('tab:' + JSON.stringify(tab));
|
|
if(tab) {
|
|
log('tab.left : ' + tab.left);
|
|
var lineDx = (parseFloat(tab.left) + parseFloat(tab.width)/2);
|
|
log('lineDx:' + lineDx);
|
|
log('changeLineDx:' + changeLineDx);
|
|
log('current:' + current);
|
|
if(changeLineDx !== false || current == 0) {
|
|
var lineWidth = dataset.linewidth;
|
|
lineWidth = parseFloat(lineWidth);
|
|
log('tab.width:' + tab.width);
|
|
log('lineWidth 1:' + lineWidth);
|
|
lineWidth = lineWidth>1?Math.abs(lineWidth):tab.width*lineWidth;
|
|
log('lineWidth 2:' + lineWidth);
|
|
ins.callMethod('setWxsLineWidth', lineWidth);
|
|
line.setStyle({
|
|
// 'left': lineDx + 'px'
|
|
'transform': 'translateX(' + (lineDx - lineWidth/2) + 'px)',
|
|
// 'width': lineWidth + 'px'
|
|
})
|
|
}
|
|
var windowwidth = parseFloat(dataset.windowwidth);
|
|
log('tabsChange:' + tabsChange);
|
|
var left = (lineDx - (windowwidth/2));
|
|
// ins.callMethod('setScrollLeft', {scrollLeft: left, tabsChange: tabsChange});
|
|
setScrollLeft(ins, {scrollLeft: left, tabsChange: tabsChange});
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function setScrollLeft(ins, obj) {
|
|
obj.scrollLeft = obj.scrollLeft < 0? 0: obj.scrollLeft;
|
|
log('触发了setScrollLeft方法:' + JSON.stringify(obj));
|
|
ins.callMethod('setScrollLeft', obj);
|
|
return false;
|
|
}
|
|
|
|
function str2Obj(str) {
|
|
if(typeof str === 'string') {
|
|
return JSON.parse(str);
|
|
}
|
|
return str;
|
|
}
|
|
|
|
module.exports = {
|
|
transition: transition,
|
|
tabsInfoChange: tabsInfoChange,
|
|
animationfinish: animationfinish,
|
|
swiperChange: swiperChange
|
|
} |