实现一个可拖拽放大缩小的DIV

因为公司项目有一个需求,要需要在一个div中去设置一个背景图片,并且还要再div中使用echarts画图,因此需要将一个div缩放以及拖动。
要实现以上功能,开起来好像有一点复杂,实际上很简单,创建两个div,只需要设置好子div的mousemove、mousedown、mouseup、mousewheel事件即可。
废话不多说直接上代码(复制过去即可用):

<!DOCTYPE html>
<html>
    <body>
        
    <div id="father" style="width: 600px; height: 600px; margin-left: auto;margin-right: auto;overflow: hidden;border: #000 solid 1px;">
        <div id="showdiv" style="width:600px; height: 600px; background: url(test.png); background-size: 100% 100%;background-repeat: no-repeat;">
            
        </div>
    </div>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js"></script>
<script>       
 //   js代码       
var old_x = 0;
var old_y = 0;
var leftkeydown = 0;
var old_offset = {left: 0, top: 0}

function listen_mousewheel(event, delta, deltaX, deltaY) {
    var e = window.event || event
    e.preventDefault()
    var x_off = event.pageX - $(this).offset().left
    var y_off = event.pageY - $(this).offset().top
    var height = $(this).height()
    var width = $(this).width()
    var offset = $(this).offset()
    if (delta == 1) {
        var new_x = width * 1.1
        var new_y = height * 1.1
    } else {
        var new_x = width * 0.9
        var new_y = height * 0.9
    }
    $(this).height(new_y)
    $(this).width(new_x)
    $(this).offset({
        left: offset.left + (x_off - (x_off / width * new_x)),
        top: offset.top + (y_off - (y_off / height * new_y))
    })
}

function listen_keydownmove(event) {
    if (leftkeydown) {
        var new_x = event.pageX - $(this).offset().left
        var new_y = event.pageY - $(this).offset().top
        $(this).offset({left: old_offset.left + (new_x - old_x), top: old_offset.top + (new_y - old_y)})
        old_offset = $(this).offset()
    }
}

function listen_mouseup(event) {
    old_x = 0;
    old_y = 0;
    leftkeydown = 0;
    old_offset = {left: 0, top: 0}
    $(this).unbind('mousemove')
    $(this).unbind('mouseup')
}

function listen_mousedown(event) {
    if (event.button == 0) {
        old_x = event.pageX - $(this).offset().left
        old_y = event.pageY - $(this).offset().top
        leftkeydown = 1;
        old_offset = $(this).offset()
        $(this).mousemove(listen_keydownmove)
        $(this).mouseup(listen_mouseup)
    }
}

$(function () {
    $('#showdiv').mousewheel(listen_mousewheel)
    $('#showdiv').mousedown(listen_mousedown)
})
</script>
    </body>
</html>

效果图:


刚加载的图片
鼠标跟随放大后
鼠标选择移动后
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,488评论 0 8
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,648评论 1 11
  • 项目中需要对div进行拖拽缩放,需要有控制面板8个控制点的那种,原以为这么常见的效果应该能搜索到很多相关插件,然而...
    小虫巨蟹阅读 6,324评论 10 28
  • 总结: 鼠标事件 1.click与dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r阅读 1,705评论 2 10
  • 本篇博客源地址 总结: 鼠标事件 1.click与dbclick事件ele.click()ele.click(ha...
    ZombieBrandg阅读 738评论 0 1

友情链接更多精彩内容