添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  // 3. 设置画布参数
  const canvas = this.canvas = new fabric.Canvas('c', {
    width: '800', // 画布宽度
    height: '600', // 画布高度
    backgroundColor: '#eee' // 画布背景色
  • 准备一个圆角矩形和插入一张图片用作参照物
// 圆角矩形
  const rect = new fabric.Rect({
    top: 300, // 距离容器顶部 300px
    left: 300, // 距离容器左侧 300px
    fill: 'orange', // 填充 橙色
    width: 100, // 宽度 100px
    height: 100, // 高度 100px
    originX:'left', // 原点
    originY:'center', //原点
    lockScalingFlip: true, //锁定翻转,及可不可以拉到边的负值
    rx: 20, // x轴的半径
    ry: 20 // y轴的半径
  // 将矩形添加到画布中
  canvas.add(rect) 
// 添加图片 import 或者 require 都行,但 '../../..' 引路径好像不行,在线的没试过
// import logo from '@/assets/logo.png' // 引入图片      
fabric.Image.fromURL(logo, oImg => {
    oImg.scale(0.5) // 缩放
    oImg.set({
      left:50,
      top:50
    canvas.add(oImg) // 将图片加入到画布

一、 缩放

1、 以原点为中心(左上角),缩放画布
      // 监听鼠标滚轮事件
      canvas.on('mouse:wheel', opt => {
        let delta = opt.e.deltaY // 滚轮向上滚一下是 -100,向下滚一下是 100
        let zoom = canvas.getZoom() // 获取画布当前缩放值
        // 控制缩放范围在 0.01~20 的区间内
        zoom *= 0.999 ** delta
        if (zoom > 20) zoom = 20
        if (zoom < 0.01) zoom = 0.01
        // 设置画布缩放比例
        canvas.setZoom(zoom)
2、以鼠标指针为中心,缩放画布
  // 监听鼠标滚轮事件
  canvas.on('mouse:wheel', opt => {
    let delta = opt.e.deltaY // 滚轮向上滚一下是 -100,向下滚一下是 100
    let zoom = canvas.getZoom() // 获取画布当前缩放值
    // 控制缩放范围在 0.01~20 的区间内
    zoom *= 0.999 ** delta
    if (zoom > 20) zoom = 20
    if (zoom < 0.01) zoom = 0.01
    canvas.zoomToPoint(
        x: opt.e.offsetX, // 鼠标x轴坐标
        y: opt.e.offsetY  // 鼠标y轴坐标
      zoom // 最后要缩放的值
  • 区别点: setZoom 和 zoomToPoint
3、 点击按钮控制缩放
// html     
<button @click="setZoom(0.1)">放大</button>
<button @click="setZoom(-0.1)">缩小</button>
// js
// 点击控制缩放
setZoom(val) {
    let zoom = this.canvas.getZoom() + parseFloat(val);
    zoom = Math.max(0.2, zoom); 
    zoom = Math.min(5, zoom); 
    let backPoint = this.canvas.getCenterPoint();
    console.log(backPoint);
    this.canvas.zoomToPoint(backPoint, zoom);

二、 拖拽

主要步骤:

  • 监听画布对象的鼠标按下事件,维护一标志符,记录此刻位置
  • 监听画布对象的鼠标移动事件,判断标志符,视图位置发生改变,更新位置
  • 监听画布对象的鼠标按起事件,释放一标志符
1、方法一
      canvas.on('mouse:down', opt => { // 鼠标按下时触发
        let evt = opt.e
          canvas.isDragging = true // isDragging 是自定义的,开启移动状态
          canvas.lastPosX = evt.clientX // lastPosX 是自定义的
          canvas.lastPosY = evt.clientY // lastPosY 是自定义的
      canvas.on('mouse:move', opt => { // 鼠标移动时触发
        console.log('查看e',opt);
        if (canvas.isDragging) {
          let evt = opt.e
          let vpt = canvas.viewportTransform // 聚焦视图的转换
          vpt[4] += evt.clientX - canvas.lastPosX
          vpt[5] += evt.clientY - canvas.lastPosY
          canvas.requestRenderAll() // 重新渲染
          canvas.lastPosX  = evt.clientX
          canvas.lastPosY  = evt.clientY
           canvas.requestRenderAll() // 重新渲染
      canvas.on('mouse:up', opt => { // 鼠标松开时触发
        canvas.setViewportTransform(canvas.viewportTransform) // 设置此画布实例的视口转换  
        canvas.isDragging = false // 关闭移动状态
  • 画布中默认可以通过拖拽来选中元素,在画布拖拽时会产生拖拽框。这里可以禁用画布的选中,可通过点击元素选中
 canvas.selection = false
2、方法二
    canvas.on({
      "mouse:down": (e) => {
        this.panning = true;
        canvas.selection = false;
      "mouse:up": (e) => {
        this.panning = false;
        canvas.selection = true;
      "mouse:move": (e) => {
        if (this.panning && e && e.e) {
          let delta = new fabric.Point(e.e.movementX, e.e.movementY);// e.e.movementX 移动时画布的横向相对偏移量
          canvas.relativePan(delta);

代码及参考

https://juejin.cn/post/7105046849362329608
https://juejin.cn/post/7143062674954256391
https://blog.csdn.net/qq_38860536/article/details/104719854

sudo apt-get install python-dev python3-dev libssl-dev 红帽/ CentOS sudo yum install python-devel python3-devel openssl-devel brew install python python3 openssl 可以在找到有关构建crypto lib的更多详细信息。 阅读()以熟悉API。 可以在找到说明示例代码的Jupyter笔 如果说canvas还有什么可以说的亮点—那自然就是能够自由地在canvas绘画.fabric自然也提供了许多方法来进行这一交互功能. 只要设置属性isDrawingMode为true就可以实现自由绘画.这时,鼠标就变成一个画笔,通过点击就可以在canvas画布进行绘画. 只要设置了isDrawingMode为true你就可以随意地在canvas进行绘画.每次鼠标抬起之后,你所绘画的路径都...
在自由移动缩放画布上定位鼠标位置 通过的操作已经实现了对画布的一系列操作,也包括在画布移动的情况下,使用相对偏差位置来定位鼠标在画布上所见位置。但是考虑进一步的情况,当画布同时发生了缩放和平移的状况又该如何? 先考虑画布在发生缩放时鼠标如何定位: 当画布进行缩放后,在浏览器中看到的是被放大后的图片,但是通过实际的验证发现实际上的画布尺寸并没有发生改变。也就是说以浏览器页面为原点左上顶点...
fabric都是通过监控滚轮事件,mouse:wheel,通过确定中心点,放大缩小,核心代码如下 this.zoomPoint = new fabric.Point(e.pointer.x, e.pointer.y); // 中心点 this.fabricObj.zoomToPoint(this.zoomPoint, this.zoom); 放大缩小太乱了,就需要重置为初始位置,刚开始我以为 this.fabricObj.zoomToPoint(new fabric.Point(0,0), 1);
fabric-photo是一种用纺织品制作的照片,它是将图像打印在布料上制成的照片。与传统的照片相比,fabric-photo具有一些独特的优点。 首先,fabric-photo具有很高的耐久性和稳定性。由于它是使用布料制作的,因此不容易受损或变形。与纸质照片相比,fabric-photo可以更长时间地保存图像的鲜明和细节。 其次,fabric-photo具有很高的装饰性。由于使用的是布料,fabric-photo可以根据个人喜好选择不同的图案和颜色,使照片更具个性化。此外,由于可以根据需要剪裁和制作,fabric-photo也可以作为装饰品应用到各种家居用品上,如抱枕、曲面布等,增加了照片的实用性和艺术性。 此外,fabric-photo还具有较好的可视性。与液晶显示屏等电子设备相比,fabric-photo没有背光,因此不会产生反光和眩光问题。这使得fabric-photo在室内光线条件下也能呈现出清晰的图像,增加了观看照片的体验。 综上所述,fabric-photo是一种具备耐久性、装饰性和可视性优势的照片制作技术。它适用于各种场合,如家庭装饰、礼品赠送等。未来随着技术的不断发展,fabric-photo有望在数字媒体转化为实物的过程中发挥更重要的作用。
let marker = ''; m.forEach(el => { let point = new T.LngLat(el.data.address.split(',')[0], el.data.address.split(',')[1]); marker = new T.Marker(point, { icon: (el.data.showColor == 0 ? this.icon1 : this.icon2) }); this.map.addOverLay(marker); let chartPopExtend = Vue.extend(MapInfoWindow) let devicePopEl = new chartPopExtend({ data: { toElecroom: this.infoCallBack store: this.$store let vm = devicePopEl.$mount('') let infoWin = new T.InfoWindow(vm.$el, { maxHeight: 180, minWidth: 120, closeButton: true, autoPan: true }); infoWin.addEventListener('open', () => { marker.addEventListener("click", () => { marker.openInfoWindow(infoWin);});
Vue2 使用天地图响应式信息窗口的一种实现方式 qq_34700748: 有多个标注点时,点击其它的标注点,为什么弹窗都是在最后一个标注点弹出 Vue 实现一简单响应式状态管理Store CSDN-Ada助手: 不知道 Vue入门 技能树是否可以帮到你:https://edu.csdn.net/skill/vue?utm_source=AI_act_vue