Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/ui/avatar-editor/src/canvas-tool/ |
Upload File : |
import { Event, Dom } from 'main.core'; import { EventEmitter } from 'main.core.events'; export default class CanvasZooming extends EventEmitter { #stepSize = 0.01; #value = 0; #defaultValue = 0; #containerWidth = 0; #minValue = -1; #maxValue = 1; #scale: Element; #knob: Element; constructor({ knob, scale, minus, plus }, defaultValue: ?Number) { super(); this.setEventNamespace('Main.Avatar.Editor'); Event.bind(minus, 'click', () => { this.#makeAStep(false); }); Event.bind(plus, 'click', () => { this.#makeAStep(true); }); this.stopMoving = this.stopMoving.bind(this); this.move = this.move.bind(this); Event.bind(knob, 'mousedown', (event) => { this.startMoving(event); }); if (defaultValue) { this.setDefaultValue(defaultValue); } this.#scale = scale; this.#knob = knob; this.reset(); } setDefaultValue(defaultValue): CanvasZooming { this.#defaultValue = defaultValue > this.#minValue && defaultValue <= this.#maxValue ? defaultValue : 0; return this; } getValue(): Number { return this.#value; } #getContainerWidth(): Number { if (this.#containerWidth > 0) { return this.#containerWidth; } const containerPos = Dom.getPosition(this.#scale); const width = containerPos.width - Dom.getPosition(this.#knob).width; if (width > 0) { this.#containerWidth = width; return this.#containerWidth; } return 0; } reset() { this.#value = this.#defaultValue; this.#adjust(); } setValue(value) { // eslint-disable-next-line no-param-reassign value = Math.ceil(value * 1000) / 1000; if (value !== this.#value && value >= this.#minValue && value <= this.#maxValue) { this.#value = value; this.#adjust(); this.emit('onChange', this.#value - this.#defaultValue); } } #makeAStep(increase) { const value = Math.min( Math.max( this.getValue() + (increase === false ? (-1) : 1) * this.#stepSize, 0, ), 1, ); this.setValue(value); } #adjust() { const middle = this.#getContainerWidth() / (this.#maxValue - this.#minValue); const value = middle + (middle * this.getValue()); Dom.adjust(this.#knob, { style: { left: [Math.ceil(value), 'px'].join(''), }, }); } move({ pageX }) { if (pageX > 0 && this.#getContainerWidth() > 0) { const percent = (pageX - this.#knob.startPageX) / this.#getContainerWidth(); this.#knob.startPageX = pageX; this.setValue(this.getValue() + percent); } } startMoving({ pageX }) { this.#knob.startPageX = pageX; Event.bind(document, 'mousemove', this.move); Event.bind(document, 'mouseup', this.stopMoving); } stopMoving() { Event.unbind(document, 'mousemove', this.move); Event.unbind(document, 'mouseup', this.stopMoving); } }