阅读 80

fabric.js画布中两个人物图标 同步移动

图片中每次都是第一个图片移动完,第二个图片才会移动,我想让他们同时间移动,想知道用什么方法解决这个问题。目前用的是两个for 循环各自的坐标来实现移动的 ????。请求大佬指点一下。

系统首页 - Google Chrome 2021-10-28 19-45-54.gif

    <script> import { fabric } from "fabric"; import Axios from "axios" // import Axios from 'axios'; // import ppp_ from './img/ppp.png'; export default {   name: "index",   data() {     return {       setfenceVisible:false,       options: [       ],       a_opacity: 1,       canvas_v: null,       pathData: [         {           data: {             data_position: null,             data_status: {             },           },         },       ],       value: "",     };   },   mounted() {     this.canvasDrawLine();     this.getPathData();   },   methods: {     //电子围栏配置     setElec_fence(){       this.setfenceVisible=true     },          //姓名标签显示     name_handleClick(e) {       if (this.a_opacity == 1) {         this.canvas_v.setActiveObject()._objects[1].set("opacity", 0.8);         this.a_opacity = 0;       } else {         this.canvas_v.setActiveObject()._objects[1].set("opacity", 0);         this.a_opacity = 1;       }       this.handleClick(e);     },     //心率标签显示     xl_handleClick(e) {       if (this.a_opacity == 1) {         this.canvas_v.setActiveObject()._objects[2].set("opacity", 0.8);         this.a_opacity = 0;       } else {         this.canvas_v.setActiveObject()._objects[2].set("opacity", 0);         this.a_opacity = 1;       }       this.handleClick(e);       console.log(this.canvas_v.setActiveObject()._objects[2].opacity);     },     //画板绘制     canvasDrawLine(keyP) {       console.log(keyP);       var canvas = new fabric.Canvas("canvas");       this.canvas_v = canvas;          //缩放        canvas.on("mouse:wheel", function (opt) {         var delta = opt.e.deltaY;         var zoom = canvas.getZoom();         zoom *= 0.999 ** delta;         if (zoom > 20) zoom = 20;         if (zoom < 0.01) zoom = 0.01;         canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom);         opt.e.preventDefault();         opt.e.stopppropagation();       });       //加载元素       document.onreadystatechange = function () {         if (document.readyState == "complete") {           //配置图片           //人物1           var imgElement = document.getElementById("ppp_");           //人物2           var ppElement = document.getElementById("pp_")           //房间           var room_ = document.getElementById("room_");                       //姓名标签           var xm_ = document.getElementById("xm_");                     //加载房间           var roomInstance = new fabric.Image(room_, {             selectable: false,             left: 670,             top: 100,             opacity: 1,             zIndex: 300,             angle: 90,           });           canvas.add(roomInstance.scale(0.2));           //============           //=======================           //加载姓名标签           var xm_Instance = new fabric.Image(xm_, {             selectable: false,             left: 270,             top: 238,             opacity: 0.8,           });           //加赞心率显示标签           canvas.add(xm_Instance.scale(0.1));                     const rect = new fabric.Rect({               width: 35,                height: 15,                rx: 6,               ry: 6,               fill: '#89929ce5'             })             const text = new fabric.IText('32', {               fontFamily: 'Calibri',               fontSize: 8,               left: rect.width/2,               top: rect.height/2,               originX: 'center',               originY: 'center',               centeredRotation: true,               fill: '#fff'             })             //创建心率标签           var block = new fabric.Group([rect,text], {             selectable: false,             left: 270,             top: 228           })           canvas.add(block.scale(0.6))                      //加载人物2图标           var ppInstance = new fabric.Image(ppElement,{             selectable:false,             left:221,             top:170,             opacity:1,           })           canvas.add(ppInstance.scale(0.3))           //加载人物1图标           var imgInstance = new fabric.Image(imgElement, {             selectable: false,             left: 270,             top: 250,             opacity: 1,             zIndex: 299,           });           canvas.add(imgInstance.scale(0.1)); //scale()使图片按比例缩小           canvas.renderAll();           var keyPoint = [           //人物1的路径坐标             [{ x: 321, y: 270, duration: 1000 },             { x: 391, y: 211, duration: 2000 },            ],             [             //人物2的路径坐标             { x: 123, y: 124, duration: 1000 },             { x: 352, y: 213, duration: 2000 },                        ]           ];           var runningDuration = 0;           //获取画布中的元素并设置该元素的属性           // canvas.setActiveObject()._objects[1].set('opacity', 0)           console.log(canvas.setActiveObject()._objects);           //载入坐标循环           for (let i = 0; i < keyPoint[0].length; i++) {             let animationDefinition = keyPoint[0][i];             let fn = function (               animationDefinition,               imgInstance,               xm_Instance,               block             ) {               return function () {                 //移动人物1图标                 {                   imgInstance.animate("left", animationDefinition.x, {                     duration: animationDefinition.duration,                     zIndex: 299,                     onChange: canvas.renderAll.bind(canvas),                   });                   imgInstance.animate("top", animationDefinition.y, {                     duration: animationDefinition.duration,                     zIndex: 299,                     onChange: canvas.renderAll.bind(canvas),                   });                 }                 //姓名移动标签                 {                   xm_Instance.animate("left", animationDefinition.x + 2, {                     duration: animationDefinition.duration,                     onChange: canvas.renderAll.bind(canvas),                   });                   xm_Instance.animate("top", animationDefinition.y - 12, {                     duration: animationDefinition.duration,                     onChange: canvas.renderAll.bind(canvas),                   });                 }                 //心率移动标签                 {                   console.log(block.opacity);                   block.animate("left", animationDefinition.x + 2, {                     duration: animationDefinition.duration,                     onChange: canvas.renderAll.bind(canvas),                   });                   block.animate("top", animationDefinition.y - 22, {                     duration: animationDefinition.duration,                     onChange: canvas.renderAll.bind(canvas),                   });                 }               };             };             window.setTimeout(               fn(animationDefinition, imgInstance, xm_Instance, block),               runningDuration             );             runningDuration += animationDefinition.duration;           }           for (let i = 0; i < keyPoint[1].length; i++) {             let animationDefinition = keyPoint[1][i];             let fn = function (               animationDefinition,               ppInstance,               xm_Instance,               block             ) {               return function () {                 console.log(xm_Instance,block)                 //移动人物2图标                 {                   ppInstance.animate("left", animationDefinition.x, {                     duration: animationDefinition.duration,                     zIndex: 299,                     onChange: canvas.renderAll.bind(canvas),                   });                   ppInstance.animate("top", animationDefinition.y, {                     duration: animationDefinition.duration,                     zIndex: 299,                     onChange: canvas.renderAll.bind(canvas),                   });                 }                              };             };             window.setTimeout(               fn(animationDefinition, ppInstance, xm_Instance, block),               runningDuration             );             runningDuration += animationDefinition.duration;           }         }       };     },   }, }; </script>


作者:iloveYHW00979
链接:https://juejin.cn/post/7024106348514115614


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐