当前位置: 首页 > 面试题库 >

点划线

杨阳飇
2023-03-14
问题内容

我想不可能设置像CSS这样的笔触属性,这非常容易。使用CSS,我们已经用虚线,点线,实线表示,但是在画布上绘制线条或笔触时,这似乎不是一个选择。您是如何实现的?

我已经看到了一些示例,但是它们对于实现如此愚蠢的功能确实很渴望。


问题答案:

好玩的问题!我编写了一个自定义的虚线实现;您可以在这里尝试。我采用了AdobeIllustrator的方法,并允许您指定破折号/间隙长度的数组

这是我的实现(对于s / o线宽略有更改):

var CP = window.CanvasRenderingContext2D && CanvasRenderingContext2D.prototype;
if (CP && CP.lineTo){
  CP.dashedLine = function(x,y,x2,y2,dashArray){
    if (!dashArray) dashArray=[10,5];
    if (dashLength==0) dashLength = 0.001; // Hack for Safari
    var dashCount = dashArray.length;
    this.moveTo(x, y);
    var dx = (x2-x), dy = (y2-y);
    var slope = dx ? dy/dx : 1e15;
    var distRemaining = Math.sqrt( dx*dx + dy*dy );
    var dashIndex=0, draw=true;
    while (distRemaining>=0.1){
      var dashLength = dashArray[dashIndex++%dashCount];
      if (dashLength > distRemaining) dashLength = distRemaining;
      var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) );
      if (dx<0) xStep = -xStep;
      x += xStep
      y += slope*xStep;
      this[draw ? 'lineTo' : 'moveTo'](x,y);
      distRemaining -= dashLength;
      draw = !draw;
    }
  }
}

若要从20,150到画一条170,10长为30px的虚线,然后以10px的间距划线,请使用:

myContext.dashedLine(20,150,170,10,[30,10]);

要绘制交替的点和点,请使用(例如):

myContext.lineCap   = 'round';
myContext.lineWidth = 4; // Lines 4px wide, dots of diameter 4
myContext.dashedLine(20,150,170,10,[30,10,0,10]);

“非常短”的破折号长度0与圆角的lineCap结合在一起会在您的直线上产生点。

如果有人知道访问画布上下文路径当前点的方法,那么我很想知道,因为它可以让我编写它,ctx.dashTo(x,y,dashes)而不是要求您在方法调用中重新指定起点。



 类似资料:
  • 主要内容:添加JMS点对点采样器,添加监听器,保存并执行测试计划,验证输出创建JMeter测试计划 进入到文件夹,双击文件以启动JMeter界面。 单击“Test Plan”节点。 将此测试计划节点重命名为JMSpoint_to_point。 选择JMSpoint_to_point节点,然后右键单击所选项。 鼠标悬停在“add”选项上,然后将显示元素列表。 选择“Threads (Users) > Thread Group”。 将此线程组元素重命名为JMS User。

  • 在粗略的破折号中,可以根据单击图例项来选择行。一开始他们都是预选的。是否可以在仪表板开始时取消选择所有这些选项?谢啦

  • 假设我们有一个具有10个GPU和40个CPU核的单个节点。这是否可以用来将节点拆分成10个节点,每个节点有4个核心,每个GPU,并带有显式的CPU/GPU绑定?如果是,配置需要是什么样子的?

  • 问题内容: 无论如何(在CSS中)是否要避免在页面..中引入文本和链接的下划线? 问题答案: 使用CSS。这会删除和元素的下划线: 有时您需要覆盖元素的其他样式,在这种情况下,可以在规则上使用修饰符:

  • 我试过,但不行。下面是我的代码: null null 它在这里起作用,但对我的VS代码不起作用。这是窃听器吗?

  • 构建JMS点对点测试计划 现在让我们编写一个JMeter测试计划来测试JMS点对点消息传递解决方案。 测试的设置是一个线程组,其中一个线程或用户通过请求队列发送2条消息。 让我们从/home/manisha/apache-jmeter2.9/bin/jmeter.sh.启动JMeter /home/manisha/apache-jmeter2.9/bin/jmeter.sh. 。 添加用户 创建一