码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 删除元素(带过渡动画)


    本文简介

    Fabric.js 提供了2个方法删除对象。

    一个是 直接删除,另一个方法是 带过渡动画 删除元素(淡出动画)。

    本文重点讲 带过渡动画 删除元素的方法,还会讲到设置 过渡时长 、删除后的 回调函数 等知识点。

    file



    相关API

    删除元素的2种方法:

    • canvas.remove(...object)
    • canvas.fxRemove(object, callbacksopt)

    设置动画时长:

    • canvas.FX_DURATION

    canvas.remove

    remove 很好理解,就是删除的意思。里面传入元素对象即可。

    canvas.remove(object)

      在 canvas.renderOnAddRemove 为 true 的情况下,使用 canvas.remove 删除元素后,画布会自动刷新。

      canvas.renderOnAddRemove 默认值是 true


      如果 canvas.renderOnAddRemove = false ,使用 canvas.remove 后,元素是删除了,但画布上还能看到元素。

      此时需要手动执行 canvas.renderAll() 或者其他刷新方法,刚刚被删的元素才会从画布上(视觉上)消失。


      canvas.fxRemove

      fxRemove 是一个带过渡动画的删除方法,使用该方法删除的对象会淡出,直至消失。

      这个方法 第一个参数 是要删除的对象;

      第二个参数 是回调对象,这个对象里有2个值,是类型函数。

      分别是 onChange 和 onComplete 。

      • onChange :在动画的每一步调用

      • onComplete:删除成功后调用


      canvas.fxRemove(object, {
        onChange() {
          console.log('在动画的每一帧调用')
        },
        onComplete() {
          console.log('删除成功后调用')
        }
      })
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      canvas.FX_DURATION

      canvas.FX_DURATION 可以设置过渡动画的时长。

      默认值是 500,单位是 毫秒

      canvas.FX_DURATION = 1500

        修改后 canvas.FX_DURATION 后,再试试 canvas.fxRemove ,删除元素的过渡时长就是你设置的时长。



        示例代码

        01

        <div class="btn-x">
          <button οnclick="delCircle()">删除元素(圆型)</button>
          <button οnclick="delRect()">带动画删除元素(方形)</button>
        </div>
        <canvas id="canvasBox" width="600" height="600"></canvas>
        
        <script src="https://cdn.bootcdn.net/ajax/libs/fabric.js/460/fabric.min.js"></script>
        <script>
          let canvas = null
          let circle = null
          let rect = null
        
          window.onload = function() {
            // 使用 元素id 创建画布,此时可以在画布上框选
            canvas = new fabric.Canvas('canvasBox', {
              width: 400,
              height: 400
            })
        
            // 圆形
            circle = new fabric.Circle({
              name: 'circle',
              top: 60,
              left: 60,
              radius: 30, // 圆的半径 30
              fill: 'yellowgreen'
            })
        
            // 矩形
            rect = new fabric.Rect({
              name: 'rect',
              top: 60, // 距离容器顶部 60px
              left: 200, // 距离容器左侧 200px
              fill: 'orange', // 填充a 橙色
              width: 60, // 宽度 60px
              height: 60 // 高度 60px
            })
        
            // 将矩形添加到画布中
            canvas.add(circle, rect)
          }
        
          // 删除圆形(没动画)
          function delCircle() {
            canvas.remove(circle)
          }
        
          // 删除矩形(有动画)
          function delRect() {
            canvas.FX_DURATION = 1500 // 设置动画时长,默认500毫秒
        
            canvas.fxRemove(rect, {
              onChange() {
                console.log('在动画的每一步调用')
              },
              onComplete() {
                console.log('删除成功后调用')
              }
            })
          }
        </script>
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49
        • 50
        • 51
        • 52
        • 53
        • 54
        • 55
        • 56
        • 57
        • 58
        • 59
        • 60


        代码仓库

        • 原生方式实现 删除元素(带过渡动画)
        • 在Vue3中使用Fabric实现 删除元素(带过渡动画)


        推荐阅读

        ⭐《Fabric.js 将本地图像上传到画布背景》

        ⭐《Fabric.js 从入门到膨胀》

        《Fabric.js 渐变效果(包括径向渐变)》

        《Fabric.js 3个api设置画布宽高》

        ⭐《Fabric.js 自定义右键菜单》

        《Fabric.js 更换图片的3种方法(包括更换分组内的图片,以及存在缓存的情况)》


        如果本文内容对你有所帮助,也请你帮我点个赞呗 👍 点赞 + 关注 + 收藏 = 学会了

      • 相关阅读:
        LCR 181 字符串中的单词反转
        【C++杂货铺】继承由浅入深详细总结
        稚晖pcb总结
        单链表在线OJ题(详解+图解)
        【Java基础夯实】枚举类回炉重造
        华为OD机试 - 数组组成的最小数字(Java 2023 B卷 100分)
        SpringBoot MVC使用Gson,序列化LocalDate,LocalDateTime
        从零开始的图像语义分割:FCN快速复现教程(Pytorch+CityScapes数据集)
        智能井盖传感器建设信息化时代智慧城市
        K线形态识别_穿头破脚
      • 原文地址:https://blog.csdn.net/weixin_39415598/article/details/125426872
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号