Скрабер ведет себя ненормально

315
15 сентября 2017, 22:41

Вот код скрабера

enableDragThumb(): Observable<any> {
    let parentWidth;
    let thumbBarClientWidth;
    const mouseUp = Observable.fromEvent(document, 'mouseup')
        .merge(Observable.fromEvent(document, 'touchend'));
    const mouseMove = Observable.fromEvent(document, 'mousemove')
        .merge(Observable.fromEvent(document, 'touchmove'));
    const thumbBarDown = Observable.fromEvent(this.thumbBar, 'mousedown')
        .merge(Observable.fromEvent(this.thumbBar, 'touchstart'))
        .map((evt: any) => {
            evt = evt.changedTouches ? evt.changedTouches[0] : evt;
            thumbBarClientWidth = this.thumbBar.clientWidth;
            parentWidth = this.thumbBar.getBoundingClientRect().width - 10;
            const left = ((evt.clientX - this.thumbBar.getBoundingClientRect().left) / parentWidth) * thumbBarClientWidth;
            this.thumb.style.left = left - 10 + 'px';
            return evt;
        });
    const mouseDown = Observable.fromEvent(this.thumb, 'mousedown')
        .merge(Observable.fromEvent(this.thumb, 'touchstart'))
        .merge(thumbBarDown)
        .map((ev: any) => {
            ev = ev.changedTouches ? ev.changedTouches[0] : ev;
            parentWidth = this.thumbBar.getBoundingClientRect().width - 10;
            return ev;
        });
    return mouseDown.mergeMap((md: MouseEvent) => {
        this.isDragging = true;
        const startX = md.clientX;
        this.startLeft = (this.thumb.offsetLeft / thumbBarClientWidth) * parentWidth;
        this.progress = (this.startLeft / parentWidth) * 100;
        const result = mouseMove
            .map((mm: any) => {
                if (mm.preventDefault) {
                    mm.preventDefault();
                }
                mm = mm.changedTouches ? mm.changedTouches[0] : mm;
                const left = this.startLeft + mm.clientX - startX;
                if (left < 0) {
                    this.progress = 0;
                    this.thumb.style.left = 0;
                } else if (left > parentWidth - 20) {
                    const percent = ((parentWidth - 20) / parentWidth) * 100;
                    this.progress = percent;
                    this.thumb.style.left = percent + '%';
                } else {
                    const percent = (left / parentWidth) * 100;
                    this.progress = percent;
                    this.thumb.style.left = percent + '%';
                }
            })
            .takeUntil(mouseUp);
        result.subscribe(null, null, () => {
            this.isDragging = false;
            this.updateProgress();
        });
        return result;
    });
}

Когда direction ltr скрабер работает нормально при изменении дирекшна на rtl скрабер ведет себя не нормально Проект на ангуляре, как исправить?

READ ALSO
события в javascript

события в javascript

как можно отловить событие клик по видео, дабл клик по видеоНужно сделать играть/пауза по клику и полноэкранный режим - дабл клик

330
Самохостинг через dlinkddns.com

Самохостинг через dlinkddns.com

Приостоновил создание сайта в теплом и уютном denvereНачал изучать вопрос хостинга

298
Как ограничить автокомплит гугл мэпс по городу?

Как ограничить автокомплит гугл мэпс по городу?

Использую апи гугл мэпс, чтобы программно получить список адресов по введенным буквам:

235
Как сравнить данные с таблицы и выводить результат?

Как сравнить данные с таблицы и выводить результат?

Приветствую всех, у меня такая задача есть вот такая таблица https://igrotekaclub/game/index

154