我正在尝试使用HTML并在页面上绘制一条线.
从我读过的所有内容建议HTML5 canvas标签是最好用的,但是我需要连接到页面上不在canvas标签中的东西的行,所以画布对我不好(想要/需要使用原生JS) .
我写了(从我发现的东西)一个功能,它做我需要的但问题是一旦出现线,页面的其他一切都消失了.
我发现每次我改变JavaScript的风格,但形状都会消失.
删除"document.write"结束时没有任何消失.
function draw(ax, ay, bx, by) {
var n, widthLine, i, x, y;
widthLine = 1;
if (Math.abs(ax - bx) > Math.abs(ay - by)) {
if (ax > bx) {
n = ax;
ax = bx;
bx = n;
n = ay;
ay = by;
by = n;
}
n = (by - ay) / (bx - ax);
for (i = ax; i <= bx; i++) {
x = i;
y = Math.round(ay + m * (x - ax));
document.write("<div style='height:" + lineWidth + "px;width:" + widthLine + "px;background-color:black;position:absolute;top:" + y + "px;left:" + x + "px;'></div>");
}
} else {
if (ay > by) {
n = ax;
ax = bx;
bx = n;
n = ay;
ay = by;
by = n;
}
n = (bx - ax) / (by - ay);
for (i = ay; i <= by; i++) {
y = i;
x = Math.round(ax + n * (y - ay));
document.write("<div style='height:" + lineWidth + "px;width:" + lineWidth + "px;background-color:black;position:absolute;top:" + y + "px;left:" + x + "px;'></div>");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Cra*_*aub 16
快速解决.
下面的函数获取该行的坐标,然后绘制它.
它的工作原理是使用细长的div元素.计算旋转角度和长度.
应该适用于所有浏览器(希望甚至是IE).
function linedraw(ax,ay,bx,by)
{
if(ay>by)
{
bx=ax+bx;
ax=bx-ax;
bx=bx-ax;
by=ay+by;
ay=by-ay;
by=by-ay;
}
var calc=Math.atan((ay-by)/(bx-ax));
calc=calc*180/Math.PI;
var length=Math.sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
document.body.innerHTML += "<div id='line' style='height:" + length + "px;width:1px;background-color:black;position:absolute;top:" + (ay) + "px;left:" + (ax) + "px;transform:rotate(" + calc + "deg);-ms-transform:rotate(" + calc + "deg);transform-origin:0% 0%;-moz-transform:rotate(" + calc + "deg);-moz-transform-origin:0% 0%;-webkit-transform:rotate(" + calc + "deg);-webkit-transform-origin:0% 0%;-o-transform:rotate(" + calc + "deg);-o-transform-origin:0% 0%;'></div>"
}
Run Code Online (Sandbox Code Playgroud)
我刚刚开发了用纯 js + html 代码画线的版本。
首先,tan 函数定义在 0 到 180 度之间。如果 x2 大于 x1,我们将反转这些点(x2 变为 x1,x1 变为 x2)。
之后,我们检查这条线的长度(毕达哥拉斯定理)并测量斜率。通过斜率,我们可以计算辐射度。要转换为度数,我们将结果相乘,然后除以 3.14。
最后我们可以绘制一个高度为1px、宽度为lineLength的div。我们根据计算出的 div 旋转该 div。
function linedraw(x1, y1, x2, y2) {
if (x2 < x1) {
var tmp;
tmp = x2 ; x2 = x1 ; x1 = tmp;
tmp = y2 ; y2 = y1 ; y1 = tmp;
}
var lineLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
var m = (y2 - y1) / (x2 - x1);
var degree = Math.atan(m) * 180 / Math.PI;
document.body.innerHTML += "<div class='line' style='transform-origin: top left; transform: rotate(" + degree + "deg); width: " + lineLength + "px; height: 1px; background: black; position: absolute; top: " + y1 + "px; left: " + x1 + "px;'></div>";
}
Run Code Online (Sandbox Code Playgroud)