js通过canvas绘制鼠标跟随特效

步骤,首先通过canvas绘制图形,然后进行设置

        var plane=document.getElementById('plane');
        var hb = document.createElement("canvas")
        var plane = document.getElementById("plane")
        var stx = hb.getContext("2d")
        var divx=0,divy=0,count=0,ax=0,ay=0 //为过渡做准备
        plane.appendChild(hb)

        hb.width = 40
        hb.height = 40

        hb.style.display = "flex"
        hb.style.position = "absolute"

        stx.fillStyle = "red"
        stx.rect(0,0,40,40)
        stx.stroke()

监听鼠标并获取鼠标坐标

window.addEventListener("mousemove",function(e){
            divx = e.clientX-plane.offsetLeft-plane.clientWidth/2;
            divy = e.clientY-plane.offsetTop-plane.clientHeight/2;

            count = 0 //过渡
        })

过渡实现 (ax和ay用于更新canvas位置,divx和divy用与获取当前鼠标位置,couny实现过渡)

        function draw(){
            if(count<100){
                    ax+=divx/100
                    ay+=divy/100
                }
            
            plane.style.left = ax +"px"
            plane.style.top = ay +"px"

            count++
            
            console.log(divx,divy);
        }

完整的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        *{
            margin: 0;
            padding: 0;
        }
        body{
            height: 100vh;
            background: linear-gradient(200deg,#005bea,#00c6fb);
        }
        #plane{
            color: #fff;
            position: absolute;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    </style>
</head>
<body>
    <div id="plane">
        
    </div>

    <script>
        var plane=document.getElementById('plane');
        var hb = document.createElement("canvas")
        var plane = document.getElementById("plane")
        var stx = hb.getContext("2d")
        var divx=0,divy=0,count=0,ax=0,ay=0
        plane.appendChild(hb)

        hb.width = 40
        hb.height = 40

        hb.style.display = "flex"
        hb.style.position = "absolute"

        stx.fillStyle = "red"
        stx.rect(0,0,40,40)
        stx.stroke()

        window.addEventListener("mousemove",function(e){
            divx = e.clientX-plane.offsetLeft-plane.clientWidth/2;
            divy = e.clientY-plane.offsetTop-plane.clientHeight/2;

            count = 0
        })

        function draw(){
            if(count<100){
                    ax+=divx/100
                    ay+=divy/100
                }
            
            plane.style.left = ax +"px"
            plane.style.top = ay +"px"

            count++
            
            console.log(divx,divy);
        }

        setInterval(draw,1)
    </script>
</body>
</html>

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
canvas中使用鼠标绘制直线的过程如下所示: 1. 首先,通过鼠标事件监听器获取鼠标在画布上移动时的坐标。这可以通过添加mousemove事件监听器来实现。在事件处理函数中,可以使用event对象的offsetX和offsetY属性来获取鼠标的坐标。\[3\] 2. 接下来,当鼠标点击画布时,可以通过添加mousedown事件监听器来触发绘制直线的操作。在事件处理函数中,可以获取鼠标点击时的坐标,并将其赋值给线段的起始点坐标。然后,调用主绘制类中的绘制方法来执行绘制操作。\[1\] 3. 在主绘制类中,可以定义一个绘制直线的方法Rae。该方法通过监听器连续执行,将鼠标左键点击时的位置坐标赋值给线段的起始点坐标,将鼠标移动后的位置坐标赋值给线段的末端点坐标。然后,创建一个线段对象,并调用其方法来更新线段的坐标和绘制直线。当鼠标左键弹起时,停止绘制直线。\[2\] 4. 最后,创建一个线段类,用于表示线段对象。该类包含构造方法用于设置线段的起始点坐标,以及更新方法和绘制方法用于更新线段的坐标和绘制直线。\[3\] 综上所述,通过监听鼠标事件和调用相应的方法,可以在canvas中实现鼠标绘制直线的功能。 #### 引用[.reference_title] - *1* *2* *3* [原生js使用canvas实现鼠标绘制直线](https://blog.csdn.net/weixin_72388638/article/details/130034235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值