动画转盘抽奖
转盘计算奖品旋转位置
computingAngle(awards) {
const CIRCLE_ANGLE = 360;
const average = CIRCLE_ANGLE / awards.length;
awards.forEach((item, i) => {
const angle = -(i * average);
item.angle = angle;
item.style = `
-webkit-transform: rotate(${angle}deg);
transform: rotate(${angle}deg);
`;
});
return awards;
},
文字弯曲效果
定义方法
wordCurveHandle(data) {
const {
text, rLen = 8, xLen = 2, yLen = 2,
} = data;
if (!text) return [];
const words = [];
const len = text.length;
const isEven = len % 2 === 0;
const midIndex = isEven ? len / 2 - 1 : (len - 1) / 2;
text.forEach((word, i) => {
let style = '';
let index = 0;
if (isEven) {
const condition = [
{ flag: i < midIndex, value: (i - midIndex) - 1 },
{ flag: i > midIndex, value: (i - midIndex) },
{ flag: i === midIndex, value: -1 },
];
index = condition[condition.findIndex((item) => item.flag)].value;
}
if (!isEven) {
index = i - midIndex;
}
style = `
display: inline-block;
-webkit-transform-origin: 50% 100%;
transform-origin: 50% 100%;
-webkit-transform: rotate(${index * rLen}deg) translate(${index * xLen}px, ${Math.abs(index) * yLen}px);
transform: rotate(${index * rLen}deg) translate(${index * xLen}px, ${Math.abs(index) * yLen}px);
`;
words.push({ word, style });
});
return words;
}
cutStr(str, maxLen, ellipsis) {
const len = str.length;
const newStr = len > maxLen ? str.substring(0, maxLen) : str;
const newArr = newStr.split('');
if (ellipsis && len > maxLen) {
newArr.push('...');
}
const words = this.wordCurveHandle({
text: newArr,
rLen: 4,
xLen: 2,
yLen: 2,
});
return words;
},
示例
const str = '五四三贰壹贰三四五';
this.words = this.cutStr(str, 7, true);
this.words = this.wordCurveHandle(['哈', '哈', '哈', '哈']);