输入范围缩放后如何在大图像上拖动和平移?

因此,我有一个较大的地图文件(只是一个大图像),该文件在页面加载时显示为100%,然后有一个范围滑块可以放大和缩小,而我可以正常工作。但是,我不确定在放大图像后如何添加平移(用鼠标单击和拖动)。用户放大后如何向图像添加平移?如果可能的话,也可以使用鼠标左键或单击并按住滚轮进行拖动。

我进行了一些搜索,但没有找到将其与范围滑块结合使用或使用jQuery的示例。我只想使用香草JS。

css

        #map {
            cursor: grab;
            width: 100%;
            min-width: 100%;
            max-width: 8500px;
        }

        #map-slider-div {
            position: fixed;
            bottom: 15px;
            width: 100%;
            text-align: center;
        }

        #map-div {
            text-align: center;
        }

html

    <div id="map-div">
        <img id="map" src="worldmap.png" alt="">
    </div>

    <div id="map-slider-div">
        <input id="map-slider" type="range" min="300" max="8500" value="300">
    </div>

JS

    const init = () => {
        let mapSlider = document.querySelector('#map-slider');
        mapSlider.addEventListener('change',zoomMap);
    }

    const zoomMap = () => {
        let map = document.querySelector('#map');
        let mapSliderVal = document.querySelector('#map-slider').value;
        map.style.width = mapSliderVal + 'px';
    }

    window.onload = init;

谢谢!

libailiang 回答:输入范围缩放后如何在大图像上拖动和平移?

好的,它可以满足我的需求,新的init方法:

    const init = () => {

        let mapSlider = document.querySelector('#map-slider');
        mapSlider.addEventListener('change',zoomMap);

        let map = document.querySelector('#map');
        let mapDiv = document.querySelector('#map-div');
        map.addEventListener('mousedown',start_drag);
        mapDiv.addEventListener('mousemove',while_drag);
        mapDiv.addEventListener('mouseup',stop_drag);

        var img_ele = null,x_cursor = 0,y_cursor = 0,x_img_ele = 0,y_img_ele = 0;

        function start_drag() {
            img_ele = this;
            x_img_ele = window.event.clientX - map.offsetLeft;
            y_img_ele = window.event.clientY - map.offsetTop;
        }

        function stop_drag() {
            img_ele = null;
        }

        function while_drag() {
            var x_cursor = window.event.clientX;
            var y_cursor = window.event.clientY;
            if (img_ele !== null) {
                img_ele.style.left = (x_cursor - x_img_ele) + 'px';
                img_ele.style.top = (window.event.clientY - y_img_ele) + 'px';

                console.log(img_ele.style.left + ' - ' + img_ele.style.top);

            }
        }

    }

但是有什么办法可以使图像不能移离屏幕边缘吗?如果您位于图片的底部并尝试缩小,则地图有时会消失。或者也许以某种方式重置缩放图像的坐标?

编辑:也回答了这个……反正足够接近。在每次缩放时重置图像的顶部和左侧,这样就永远不会完全看不见:

const zoomMap = () => {
        let map = document.querySelector('#map');
        map.style.top = 0;
        map.style.left = 0;
        let mapSliderVal = document.querySelector('#map-slider').value;
        map.style.width = mapSliderVal + 'px';
    }

是否会喜欢它在当前/最后位置上进行放大和缩小。。由于某种原因,它始终会放大到左上角?

本文链接:https://www.f2er.com/3112739.html

大家都在问