Skip to content

Instantly share code, notes, and snippets.

@b-aleksei
Created September 2, 2021 06:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save b-aleksei/76e45351eb10700ee22fdc7ad1eee9ff to your computer and use it in GitHub Desktop.
Save b-aleksei/76e45351eb10700ee22fdc7ad1eee9ff to your computer and use it in GitHub Desktop.
вращение счетчика
import ResizeObserver from 'resize-observer-polyfill';
export class RotateNumber {
constructor(selector) {
this.$el = typeof selector === 'string' ? document.querySelector(selector) : selector;
if (!(this.$el instanceof HTMLElement)) {
return;
}
this.digits = this.$el.querySelectorAll('.payout__container');
this.maxNumberValue = 9;
this.height = this.$el.offsetHeight;
const resizeObserver = new ResizeObserver(() => {
this.height = this.$el.offsetHeight;
});
resizeObserver.observe(this.$el);
}
setNumber(number) {
const strNumber = String(number).slice(1);
for (let i = 0; i < strNumber.length; i++) {
const targetNumber = +strNumber[i];
const currentNumber = +this.digits[i].firstElementChild.firstElementChild.innerText;
if (targetNumber !== currentNumber) {
this.addNumbers(targetNumber, currentNumber, i);
}
}
}
addElement(html) {
return '<div class="payout__number">' + html + '</div>';
}
addNumbers(targetNumber, currentNumber, index) {
const digitWrapper = this.digits[index].firstElementChild;
const digitFirstItem = digitWrapper.firstElementChild;
let items = '';
if (currentNumber > targetNumber) {
for (let i = targetNumber; i >= 0; i--) { // от нуля то таргета
items += this.addElement(i);
}
for (let i = this.maxNumberValue; i >= currentNumber + 1; i--) {
items += this.addElement(i);
}
}
if (currentNumber < targetNumber) {
for (let i = targetNumber; i >= currentNumber + 1; i--) {
items += this.addElement(i);
}
}
items += this.addElement(digitFirstItem.innerText);
digitWrapper.style = '';
digitWrapper.innerHTML = items;
setTimeout(() => {
this.transformNumbers(digitWrapper);
}, 300);
}
transformNumbers(node) {
const transformY = node.offsetHeight - this.height;
node.style.cssText = 'transform: translateY(' + transformY + 'px);transition:transform 0.5s';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment