Горизонтальная прокрутка на холсте прямоугольника при применении шкалы - PullRequest
0 голосов
/ 19 марта 2020

Цель: На холсте рисуется прямоугольник полной ширины высотой 100 пикселей. Существует ползунок (в диапазоне от 1 до 100), который используется для масштабирования ширины прямоугольника (изображение прилагается ниже). Когда ползунок находится в положении 0, прямоугольная шкала равна 1. Масштаб линейно увеличивается (от 1 до 2) по мере увеличения значения ползунка по мере увеличения значения ползунка. Цель состоит в том, чтобы сделать прямоугольник с горизонтальной прокруткой, когда масштаб больше 1 (потому что в идеале прямоугольник должен переполняться, если масштаб больше 1).

enter image description here

Текущая кодовая база:

componentDidMount() {
        this.drawCanvas();
    }

    drawCanvas(){


        let canvas = document.getElementById("timeline-canvas")
        let ctx = canvas.getContext("2d")

        ctx.fillStyle = 'red'
        ctx.strokeRect(0,0, canvas.width, 100)
        ctx.fillRect(0,0,canvas.width, 100)
        ctx.save()
    }

    changeValue(){
        //get the value of slider
        let value = document.getElementById('myRange').value
        console.log(value)

        let canvas = document.getElementById('timeline-canvas')
        let ctx =  canvas.getContext('2d')

        //map the value of slider to the scale. In this case slider value 1 represents
        //scale 1. And slider value 100 represents scale 2
        let scale = ((value/99) + (98/99))

        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.fillStyle = 'red'
        ctx.scale(scale, 1);

        //to equally scale it on left and right, x coordinate is given as below
        ctx.strokeRect(-((scale-1)/2)*canvas.width,0,canvas.width, 100)
        ctx.fillRect(-((scale-1)/2)*canvas.width,0,canvas.width, 100);

        ctx.restore()
        ctx.save();
    }


    render() {
        return (
            <div className="App">
                <header className="App-header">
                    <div className="slidecontainer">
                        <input type="range" min="1" max="100" className="slider" id="myRange" onChange={this.changeValue.bind(this)}/>
                    </div>
                    <div className='canvas-container'>
                        <canvas id="timeline-canvas" style={{width:100+"%"}}/>
                    </div>

                </header>
            </div>
        )
    }

Проблема: Прямоугольник не имеет горизонтальной прокрутки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...