d3.js - d3在画布上绘制svg元素
问题描述
我试图在不断向上滚动的画布上绘制一些东西。画布被创建为异物
this.svg = d3.select(this.root.nativeElement).append("svg")
let foreigner = this.svg.append("foreignObject")
.attrs({
x: 0,
y: 0,
width: `${this.width}`,
height: `${this.height}`
})
我在上面画了几条线:
let g = this.svg.append("g")
g.append("line").attrs({
x1: 100,
y1: 0,
x2: 100,
y2: this.height-1,
stroke: "orange"
})
一切都很好,直到它开始向上滚动。滚动是一个计时器,它使用 drawImage 将图像向上绘制这么多像素,然后在底部绘制一些新的东西。对于测试,我只是将一些东西放在一起以生成随机的黑色块。
let step = 2
ctx.drawImage(ctx.canvas,
0, step,
this.width, this.height - step,
0, 0,
this.width, this.height - step)
let x = Math.floor(Math.random() * this.width)
ctx.fillStyle = "black"
ctx.fillRect(x - step, this.height - step, 5, step)
向上滚动部分有效。但是发生的情况是,当它滚动得足够多时,我的橙色线条就会消失。它们仍然在渲染的 SVG 中,并且它们在文件中仍然比画布晚(更高的 z 顺序),但它们不再可见。
是什么让它这样做?异物内部的画布是否与内置 svg 对象不一样?
解决方案
推荐阅读
- flutter - 从外部方法传递异常错误以显示在小部件树中
- css - 外部css不处理数据
- android - Flutter/Android Studio 使用来自另一个项目的密钥来签署我的发行版
- reactjs - 如何修复 React useEffect 时间?
- mysql - mysql中的字符串操作
- java - VSCode 是否可以选择为 java 类“创建测试”?
- php - Elastic Beanstalk 上的 PHP 编写器
- c++ - 一个简单的 3 文件项目中的循环依赖
- python - IOError:[Errno 25] 设备的 ioctl 不合适
- html - 不同的渲染 VS IISExpress 与生产 IIS