问答

网页怎么增加文字的面积呢?

作者:admin 2021-05-11 我要评论

原因 想要给文字添加点击效果,但是和图里的一样,"-"的'受力面积'太小了,导致只能对准点击才有效,不太友好 目标 点击圆框内任何地方都能触发文字的点击事件 前提 ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

原因

想要给文字添加点击效果,但是和图里的一样,"-"的'受力面积'太小了,导致只能对准点击才有效,不太友好

目标

点击圆框内任何地方都能触发文字的点击事件

前提

所有线条都是通过svg画的, 文字'-'是text标签.
只给text标签绑定,不绑给circle.
有啥办法吗

drawCircle: function (startY, container, tag, hasChild) {
    const self = this;
    const tagMap = self.options.tagMap;
    let svgContainer = container.firstChild;
    if (!hasChild) {
        let newPath = document.createElementNS("http://www.w3.org/2000/svg", "path");
        newPath.setAttribute('stroke', 'black');
        newPath.setAttribute('fill', 'transparent');
        newPath.setAttribute('stroke-width', '1px');
        newPath.setAttribute('d', `M 0 ${startY - container.offsetTop} h 50`)
        svgContainer.appendChild(newPath);
    }
    let circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
    circle.setAttribute('stroke', 'black');
    circle.setAttribute('fill', 'white');
    circle.setAttribute('stroke-width', '1px');
    circle.setAttribute('cx', 50);
    circle.setAttribute('cy', startY - container.offsetTop);
    circle.setAttribute('r', '10px');
    let text = document.createElementNS("http://www.w3.org/2000/svg", "text");
    text.setAttribute('x', 50);
    text.setAttribute('y', startY - container.offsetTop + 5);
    text.setAttribute('text-anchor', 'middle');
    text.setAttribute('fill', 'black');
    text.setAttribute('class', 'black');
    text.innerHTML = hasChild ? '-' : tagMap.get(tag).length
 text.addEventListener("click", self.controlVisibilityOfChildren.bind(self, tag))
    svgContainer.appendChild(circle);
    svgContainer.appendChild(text);
},

图片.png

图片.png

###

直接用css的after伪元素就可以,一般封装一个mixin

@mixin extend-click() {
  //扩展点击区域
  position: relative;
  &:before {
    content: "";
    position: absolute;
    top: -6px;
    left: -6px;
    right: -6px;
    bottom: -6px;
  }
}
###

变成 block。然后宽高100%。

当然这个问题难道不应该考虑把事件绑定在外面的盒子上吗?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 网页怎么增加文字的面积呢?

    网页怎么增加文字的面积呢?

  • Java:请求 CompletableFuture 源码中

    Java:请求 CompletableFuture 源码中

  • git revert回退版本后,一般怎么恢复回

    git revert回退版本后,一般怎么恢复回

  • vue 里js怎么判断<svg>&

    vue 里js怎么判断<svg>&

腾讯云代理商
海外云服务器