JS拖拽图片

分享一个简单的图片拖拽效果

HTML结构

用一个div包裹图片

    <div class="box">
        <img src="./images/img.jpg" alt="">
    </div>

CSS样式

盒子加上溢出隐藏,这里做的效果是Y轴滚动,所以让width:100%高度自适应

    <style>
        .box {
            position: relative;
            width: 888px;
            height: 300px;
            margin: 100px auto;
            overflow: hidden;
        }

        .box img {
            position: absolute;
            width: 100%;
        }
    </style>

JS

    <script>
        let box = document.querySelector('.box');
        let img = document.querySelector('img');
        let maxHeight = 0
        // 在图片加载完之后取得可移动最大高度
        img.onload = function () {
            maxHeight = img.clientHeight - box.clientHeight
        }
        img.onmousedown = function (event) {
            event = window.event || event;
            let imgY = event.pageY - this.offsetTop  // 鼠标在盒子中的位置
            document.onmousemove = function (e) {
                e = window.event || e;
                e.preventDefault() // 禁止默认行为
                let y = e.pageY - imgY // 算出Y轴移动距离
                y = y > 0 ? 0 : y // 限制最大最小值
                y = Math.abs(y) < maxHeight ? y : -maxHeight
                img.style.top = y + 'px'
                console.log(y);
            }
            document.onmouseup = function () {
                document.onmousemove = null
            }
        }
    </script>

效果如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值