最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

angular - Canva scroll and descroll on cursor position as origin - Stack Overflow

programmeradmin1浏览0评论

I struggle for a few days on this issue. I have a video editing timeline in a canva as you can see : [](The numbers are the frame's number of the video)

I can zoom in and out in this timeline and scroll horizontally. I don't want to get outside my video length (I mean before the first frame and after the last one). This works well.

The issue is when I scroll in my timeline I try to do it based on my cursor position as the origin. It works for zoom in, but not for zoom out if I change my cursor position between zoom in and zoom out

You can find the function I used below :

private coordinateXOnCanvas(event: MouseEvent): number {
        const rect = this.canvasRef.nativeElement.getBoundingClientRect();
        return event.clientX - rect.left;
    }

/** Zoom handling */
    @HostListener('wheel', ['$event'])
    onWheel(event: WheelEvent) {
        event.preventDefault();
        const zoomFactor = 1.1;
        const xOnCanvas = this.coordinateXOnCanvas(event);

        this.zoom = Math.min(Math.max(this.zoom * (event.deltaY < 0 ? zoomFactor : 1 / zoomFactor), 1), this.zoomMax);

        // Adjust offset to set cursor at the origin of zoom
        const notVisibleTimelineWidth = Math.abs(this.canvasWidth * this.zoom - this.canvasWidth); // Return in px the width of not visible timeline
        this.offsetX = Math.min(-notVisibleTimelineWidth * (xOnCanvas / this.canvasWidth), 0); //Set the offset to a percentage (depends on x) of not visible timeline
        console.log(this.offsetX);
        this.clampOffsetX();

        this.drawTimeline();
    }

If you have any idea what should be the good equation, I would be gratefull !

I tried to change many times my function to determine my offset but I can't find one which fit the desired behavior

发布评论

评论列表(0)

  1. 暂无评论