有部分裁图功能的dome

自己写的一个有点裁图功能的dome

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .dr1{
  height: 260px;
  /* background:url("https://img-blog.csdn.net/20170701221659356") no-repeat; */
  position: relative;
  width: 476px;
}
.aa{
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.8);
}
.dr{
  position: absolute;
  top:0;
  left:200px;
    width:100px;
    height:100px;
   background:url("https://img-blog.csdn.net/20170701221659356");
   background-repeat: no-repeat;
   background-position: -200px 0;
   mask-size:100px 100px;
   -webkit-mask-size:100px 100px;
   mask: url("http://static.w3ctrain.com/upload_cae6fcb079f57792a47202cb67bbc04a-dji-seeklogo.com.svg");
}
.bao{
    width: 50px;
    height: 20px;
    text-emphasis: center;
    line-height: 20px;
    background-color: aqua;
    color: #ffffff;
}
       
    </style>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<div class="dr1">
    <img id="image" src="https://img-blog.csdn.net/20170701221659356">
    <div class="aa"></div>
    <div class="dr container"></div>
  </div>
  <canvas id="mycanvas" width="100" height="100"></canvas>
  <div onclick="bao()" class="bao">保存</div>
 <div id="jj"></div>
  
  
  <script>
       var objda = document.getElementsByClassName('dr1')[0];
       var obj = document.getElementsByClassName('container')[0];
       var wid = parseInt(getComputedStyle(objda)['width']),
           heig = parseInt(getComputedStyle(objda)['height'])
           wid1 = parseInt(getComputedStyle(obj)['width']),
           heig1 = parseInt(getComputedStyle(obj)['height']);
        var maxX =wid - wid1;//X轴可移动最大距离
        var maxY = heig - heig1;//Y轴可移动最大距离
        var can = document.getElementById("mycanvas");
        var ctx = can.getContext("2d");
        var jj = document.getElementById("jj");
        var images = document.getElementById("image");
       function drap(obj) {
        obj.addEventListener('mousedown', start);
 
        function start(event) {
            // 鼠标左键
            if (event.button == 0) {
                // getComputedStyle(obj)['margin-left'] return XXpx需要转成整型
                // 如果有obj有margin值而不加这个数组拖拽会出现位置偏移
                offsetX = event.pageX - obj.offsetLeft + parseInt(getComputedStyle(obj)['margin-left']);
                offsetY = event.pageY - obj.offsetTop + parseInt(getComputedStyle(obj)['margin-top']);
                // 绑定事件,同样unbind解绑定,此效果的实现最后必须要解绑定,否则鼠标松开后拖拽效果依然存在
                //movemove事件必须绑定到$(document)上,鼠标移动是在整个屏幕上的
                document.addEventListener('mousemove', move);
                //此处的$(document)可以改为obj
                document.addEventListener('mouseup', stop);
            }
            return false;//阻止默认事件或冒泡
        }
 
        function move(event) {
            console.log(111)
            var moveX = (event.pageX - offsetX)
            var moveY = (event.pageY - offsetY)
          
            //范围限定  最小时取最大  最大时取最小
            if(moveX < 0) {
                moveX=0
            }else if(moveX>maxX){
                moveX=maxX;
            }
            if(moveY < 0) {
                moveY=0;
            }else if(moveY>maxY){
                moveY=maxY; 
            }
            obj.style.left = moveX + 'px';
            obj.style.top = moveY + 'px';
            obj.style.backgroundPosition=-moveX+"px "+-moveY+"px";
           
            return false;//阻止默认事件或冒泡
        }
 
        function stop(envet) {
            console.log(133)
            document.removeEventListener('mousemove', move);
            document.removeEventListener('mouseup', stop);
            return false;//阻止默认事件或冒泡
        }
    }
   
    drap(obj);

    function bao(){
        console.log(parseFloat(obj.style.top))
        ctx.drawImage(images,-parseFloat( obj.style.left),-parseFloat( obj.style.top));
         var image = new Image();
        image.src = can.toDataURL("image/png");//生成一张图片
        jj.append(image)
    }


  </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值