lina666
@lina666
Изучаю веб ЯП.

Как не получать координаты вложенного блока?

Здравствуйте, учусь делать простенькие ползунки, столкнулся с проблемой
Во время клика, функция возвращает координату в каком месте был совершен клик, после чего с помощью другой функции и стиля left я передвигаю ползунок
Суть проблемы, при нажатии на любом месте, ползунок передвигается куда нужно, но стоит нажать на сам ползунок он принимает позицию 0-15, т.к функция возвращает координаты клика ползунка, т.е функция по нажатию возвращает координаты вложенных элементов, а по идее ничего не должно происходить, помогите пожалуйста, я в js 1.5 дня.
Вот сами ползунки 5e940e0c42391248054920.png
Вот косячная функция:
public getCoordinates(block: any, event: any) {
        event.stopPropagation();
        let x: number = event.layerX;
        return this.conventPersent(block, x);
    }


Весь код в целом
export default class Model {
    private blocks: any;


    constructor(data: any) {
        this.searchBlocks(data.blockName);
        this.searchController()
    }

    public getBlocks() {
        return this.blocks
    }


    public getCoordinates(block: any, event: any) {
        event.stopPropagation();
        let x: number = event.layerX;
        return this.conventPersent(block, x);
    }

    private conventPersent(block: any, value: number) {
        return value / block.offsetWidth * 100;
    }

    private searchBlocks(blockName: string) {
        this.blocks = document.getElementsByClassName(blockName);
    }

    private searchController() {
        for (let i = 0; i < this.blocks.length; i++) this.blocks[i].querySelectorAll('.range-slider__point');
    }
}

import Model from "./Model";
import Views from "./Views";


export default class Presenter {
    protected model: Model = new Model({
        blockName: 'range-slider'
    });
    protected views: Views = new Views();

    constructor() {
        this.trackClickController()
    }

    protected trackClickController() {
        const model: Model = this.model;
        for (let block of model.getBlocks())
            block.onclick = () => this.views.setPoint(block, model.getCoordinates(block, event));}

}

export default class Views {

    public setPoint(block : any, coordinates : number ,namePoint : string = 'range-slider__point_one')
    {
        return block.querySelector('.' + namePoint).style.left = `${coordinates}%`
    }
    
}
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы