我正在构建共享边界的几个县的地图。每个县都是它自己的封闭路径,因此相邻县的边界相互重叠。
我想给每个县一个虚线。但是,在应用时,相交的边界看起来很难看,因为每个县的虚线边界重叠,从而产生不均匀的虚线外观。
我的用户将通过将鼠标悬停在县边界内的区域上来选择县,因此(我相信)有必要为每个县创建一个封闭的路径。
解决方案?
我正在构建共享边界的几个县的地图。每个县都是它自己的封闭路径,因此相邻县的边界相互重叠。
我想给每个县一个虚线。但是,在应用时,相交的边界看起来很难看,因为每个县的虚线边界重叠,从而产生不均匀的虚线外观。
我的用户将通过将鼠标悬停在县边界内的区域上来选择县,因此(我相信)有必要为每个县创建一个封闭的路径。
解决方案?
如果将 a<pattern>
用于笔划,则可以基于整体坐标系定义图案,而不是基于任何一种形状的尺寸。因此,不同形状的图案将完美排列。
缺点是图案不会与线条的方向对齐:无论线条是垂直、水平还是弯曲,图案都将保持不变。就好像你有一张你的图形大小的图案壁纸,并沿着你的形状轮廓剪下一条。因此,诀窍是找出一个看起来不错的模式,无论线如何穿过它。
见例子: http: //fiddle.jshell.net/LYue4/2/
基本外观是使用重叠 dash-array 属性的结果。将鼠标悬停在图像上,它将切换到棋盘图案;如果您在图像上按住鼠标,它将切换到对角线图案。
两者看起来都不错,但不是很好,具体取决于路径线的角度。您必须在地图上对其进行测试,看看它是否有所改进。
模式代码:
<defs>
<pattern id="checkerboard" patternUnits="userSpaceOnUse" width="2" height="2">
<rect width="1" height="1"/>
<rect width="1" height="1" x="1" y="1"/>
</pattern>
<pattern id="diagonals" patternUnits="userSpaceOnUse" width="2" height="2">
<line x1="-1" y1="0" x2="2" y2="3" />
<line x1="0" y1="-1" x2="3" y2="2" />
</pattern>
</defs>
CSS:
svg path{
fill:lightblue;
stroke: black;
stroke-dasharray: 2 2;
}
svg:hover path{
stroke: url(#checkerboard);
stroke-dasharray: none;
}
svg:active path{
stroke: url(#diagonals);
stroke-dasharray: none;
}
pattern line {
stroke-width:0.8;
stroke:black;
}
您当然可以随意调整图案拼贴的大小和对角线的粗细,但我发现线条必须比图案拼贴长才能使它们平滑重叠。
是的,封闭的路径是必需的。但是,虚线笔划总是不均匀的,因为虚线数组与路径长度有关,路径长度对于每条路径都是不同的。对于每条路径,最好放弃笔画或使其保持相同的宽度,不使用破折号。我用来显示鼠标悬停的策略是降低鼠标悬停时的不透明度,然后在鼠标悬停时将其返回到 1.00。