java-mall-app/components/QS-tabs-wxs-list/wxs/QS-tabs-wxs.wxs
2024-11-01 16:35:40 +08:00

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
}