美文网首页让前端飞程序员
纯Canvas事件按钮点击按下效果

纯Canvas事件按钮点击按下效果

作者: toyfish | 来源:发表于2019-03-25 16:20 被阅读17次

使用纯Canvas实现一个按钮点击按下的效果,类似下图

效果

使用到的API
阴影偏移:

阴影模糊:

阴影颜色:

路径:

  • beginPath()
  • moveTo()
  • lineTo()
  • quadraticCurveTo()
  • closePath()
  • 以此为 起始一条路径,或重置当前路径把路径移动到画布中的指定点,不创建线条添加一个新点,然后在画布中创建从该点到最后指定点的线条创建二次贝塞尔曲线创建从当前点回到起始点的路径

具体实现:

<!DOCTYPE html>
<html>
<body>

    <canvas id="myCanvas" width="1000" height="800" style="border:1px solid #d3d3d3;"></canvas>

    <script>
        var c = document.getElementById("myCanvas");
        var ctx = c.getContext("2d");

        var x = 20
        var y = 20
        var height = 100
        var width = 200
        var radius = 5

        // 绘制初始状态
        radiusRect(x, y, width, height, radius, ctx)
        setShadow(ctx)
        draw(ctx)
        cleartShadow(ctx)

        // 绘制圆角矩形
        function radiusRect(x, y, width, height, radius, ctx) {
            // 开启路径
            ctx.beginPath()
            // 设置填充颜色
            ctx.fillStyle = "#0066CC"
            // 绘制边
            ctx.moveTo(x, y + radius)
            ctx.lineTo(x, y + height - radius)
            // 绘制圆角
            ctx.quadraticCurveTo(x, y + height, x + radius, y + height)
            ctx.lineTo(x + width - radius, y + height)
            ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius)
            ctx.lineTo(x + width, y + radius)
            ctx.quadraticCurveTo(x + width, y, x + width - radius, y)
            ctx.lineTo(x + radius, y)
            ctx.quadraticCurveTo(x, y, x, y + radius)
            // 闭合路径
            ctx.closePath();
        }

        // 设置阴影和偏移
        function setShadow(ctx) {
            ctx.shadowOffsetX = 0
            ctx.shadowOffsetY = 10 // 10个偏移量
            ctx.shadowBlur = 0
            ctx.shadowColor = "#006600"
        }

        // 清楚掉阴影和位移
        function cleartShadow(ctx) {
            ctx.shadowOffsetX = 0
            ctx.shadowOffsetY = 0
        }

        // 绘制到画布上
        function draw(ctx) {
            ctx.stroke()
            ctx.fill()
        }

        //事件监听 按下时,持续的绘制为按下状态
        c.addEventListener('mousedown', (e) => {
            if (e.clientX >= x && e.clientX <= x + width && e.clientY >= y && e.clientY <= y + height && e
                .button == 0) {
                ctx.clearRect(0, 0, 1000, 1000) // 先清楚所有的矩形
                radiusRect(x, y + 10, width, height, radius, ctx) // 10个偏移量
                draw(ctx)


            }
        })

        //事件监听 抬起时,恢复为初始状态
        c.addEventListener('mouseup', (e) => {
            if (e.button == 0) {
                setTimeout(() => {
                    radiusRect(x, y, width, height, radius, ctx)
                    setShadow(ctx)
                    draw(ctx)
                    cleartShadow(ctx)
                }, 100)
            }
        })
    </script>
</body>
</html>

相关文章

  • 纯Canvas事件按钮点击按下效果

    使用纯Canvas实现一个按钮点击按下的效果,类似下图 使用到的API阴影偏移: shadowOffsetX = ...

  • 小程序  点击按钮后修改颜色(样式)

    需实现的功能:点击按钮后,按钮的颜色会加深 效果展示:原按钮 点击后的按钮 思路:给按钮设置一个点击事件,点击了按...

  • 录音与播放录音

    按下录音的点击事件 抬手结束录音触发事件 播发按钮的点击事件

  • day_11pygame应用

    1.pygame事件 QUIT:关闭按钮被点击事件 MOUSEBUTTONDOWN:鼠标按下事件MOUSEBUTT...

  • day11-pygame应用

    1. pygame事件 QUIT:关闭按钮被点击事件MOUSEBUTTONDOWN:鼠标按下事件MOUSEBUTT...

  • 鼠标相关事件函数

    属性描述功能点击事件OnMouseDown按下按下鼠标按钮时,将调用OnMouseDownOnMouseUp抬起当...

  • Day11-pygame应用

    1.pygame事件 QUIT:关闭按钮被点击事件MOUSEBUTTONDOWN:鼠标按下MOUSEBUTTONU...

  • 11 Pygame进阶

    Pygame事件 设置窗口标题 QUIT:关闭按钮被点击事件MOUSEBUTTONDOWN:鼠标按下事件MOUSE...

  • 2018-07-30day-11

    一、鼠标和键盘的pygame事件 QUIT:关闭按钮被点击事件MOUSEBUTTONDOWN: 鼠标按下事件MOU...

  • UIPickView的使用

    一 :预期效果 :点击按钮出现 UIPickerView 背景变为半透明效果 .1 在按钮的点击事件中 //创建全...

网友评论

    本文标题:纯Canvas事件按钮点击按下效果

    本文链接:https://www.haomeiwen.com/subject/fwhbvqtx.html