首页前端开发HTMLCSS极坐标的实例代码

CSS极坐标的实例代码

时间2024-01-27 17:39:03发布访客分类HTML浏览1018
导读:收集整理的这篇文章主要介绍了CSS极坐标的实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。 前言项目有图表方面的需求,其中有做卫星定位的图形,需要制作极坐标来显示当前北半球或南半球的卫星分布情况。第一时间想到了echar...
收集整理的这篇文章主要介绍了CSS极坐标的实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

项目有图表方面的需求,其中有做卫星定位的图形,需要制作极坐标来显示当前北半球或南半球的卫星分布情况。第一时间想到了echarts的极坐标,找到示例,虽然满足了部分需求,但是极坐标是由canvs画的,卫星有自己的编号,所以难以辨析每个点对应的卫星编号。于是就想到了自己去用CSS画极坐标

提示:以下是本篇文章正文内容,下面案例可供参考

一、示例

上面示例,下面echarts示例

二、设计步骤

1.纬度

几个div,设置圆角

2.经度

多条0.5px的边框,通过旋转实现

lines: [        {
          id: 1,          transform: "translatex(-50%) rotateZ(0deg) scaleX(0.4)",          borderStyle: "solid",          borderColor: "#333",        }
,        {
          id: 2,          transform: "translateX(-50%) rotateZ(45deg) scaleX(0.4)",          borderStyle: "dashed",          borderColor: "#91cc75",        }
,        {
          id: 3,          transform: "translateX(-50%) rotateZ(90deg) scaleX(0.4)",          borderStyle: "solid",          borderColor: "#333",        }
,        {
          id: 4,          transform: "translateX(-50%) rotateZ(135deg) scaleX(0.4)",          borderStyle: "dashed",          borderColor: "#91cc75",        }
    ,      ],

3.卫星(点)

后台的数据只有经度和纬度。纬度很好做,按照90°的比例进行定位。经度用到旋转,注意不是直接在点上旋转,否则只是盒子旋转,需要在点外边套一个div进行旋转,如果需要美化,可以使点反方向旋转该角度达到编号是一个正的效果。

三、代码实现

代码是以vue的组件来写的,satellITes就是极坐标的数据接口。

template>
      div class="polar">
        div class="polar-main">
          div class="polar-1">
            div class="polar-2">
              div class="polar-3">
            p              v-for="item in latitudes"              :key="item.id"              class="latitude"              :style="{
                top: item.location.top,                transform: item.location.transform,              }
    "            >
              {
{
 item.value }
}
                /p>
                div class="polar-center">
                  div class="satellites">
                    div v-for="item in satellites" :key="item.name">
                  p                    v-for="ele in item.distribution"                    :key="ele.id"                    class="satellite-box"                    :style="{
                      transform: rotate(ele.long),                    }
    "                  >
                    el-tooltip                      class="item"                      effect="dark"                      :content="`经度:${
ele.long}
 纬度:${
ele.lati}
    `"                      placement="top-start"                    >
                      span                        class="satellite"                        :style="{
                          backgroundColor: ele.color,                          top: top(ele.lati),                          transform: rotate(-1 * ele.long),                        }
    "                        >
{
{
 ele.id }
}
    /span                      >
                        /el-tooltip>
                      /p>
                    /div>
                  /div>
                /div>
              /div>
            /div>
          /div>
      p        v-for="item in lines"        :key="item.id"        class="line"        :style="{
          transform: item.transform,          borderStyle: item.borderStyle,          borderColor: item.borderColor,        }
    "      >
    /p>
      p        v-for="item in longitudes"        :key="item.id"        class="longitude"        :style="{
          top: item.location.top,          left: item.location.left,          transform: item.location.transform,        }
    "      >
        {
{
 item.value }
}
          /p>
        /div>
        div class="satellite-name">
    /div>
      /div>
    /template>
    script>
export default {
  data() {
    return {
      lines: [        {
          id: 1,          transform: "translateX(-50%) rotateZ(0deg) scaleX(0.4)",          borderStyle: "solid",          borderColor: "#333",        }
,        {
          id: 2,          transform: "translateX(-50%) rotateZ(45deg) scaleX(0.4)",          borderStyle: "dashed",          borderColor: "#91cc75",        }
,        {
          id: 3,          transform: "translateX(-50%) rotateZ(90deg) scaleX(0.4)",          borderStyle: "solid",          borderColor: "#333",        }
,        {
          id: 4,          transform: "translateX(-50%) rotateZ(135deg) scaleX(0.4)",          borderStyle: "dashed",          borderColor: "#91cc75",        }
,      ],      longitudes: [        {
          id: 5,          value: "90°",          location: {
            top: "50%",            left: "100%",            transform: "translateY(-50%)",          }
,        }
,        {
          id: 6,          value: "180°",          location: {
            top: "100%",            left: "50%",            transform: "translateX(-50%)",          }
,        }
,        {
          id: 7,          value: "270°",          location: {
            top: "50%",            left: "0",            transform: "translateX(-100%) translateY(-50%)",          }
,        }
,        {
          id: 8,          value: "360°",          location: {
            top: "0",            left: "50%",            transform: "translateX(-50%) translateY(-100%)",          }
,        }
,      ],      latitudes: [        {
          id: 1,          value: "90°",          location: {
            top: "50%",            left: "0",            transform: "translateY(-50%) translateX(50%)",          }
,        }
,        {
          id: 2,          value: "60°",          location: {
            top: "0",            left: "0",            transform: "translateY(-50%) translateX(50%)",          }
,        }
,        {
          id: 3,          value: "30°",          location: {
            top: "-50%",            left: "0",            transform: "translateY(-50%) translateX(50%)",          }
,        }
,      ],      satellites: [        {
          name: "Below Mask",          distribution: [            {
              id: "10",              long: 46.397128,              lati: 56.397128,              color: "#409eff",            }
,            {
              id: "08",              long: 76.397128,              lati: 32.916527,              color: "#409eff",            }
,          ],        }
,        {
          name: "Unhealthy",          distribution: [            {
              id: "25",              long: 156.397128,              lati: 62.916527,              color: "#f56c6c",            }
,            {
              id: "25",              long: 316.397128,              lati: 12.916527,              color: "#f56c6c",            }
,          ],        }
,        {
          name: "missing",          distribution: [            {
              id: "07",              long: 256.397128,              lati: 22.916527,              color: "#118452",            }
,            {
              id: "18",              long: 56.397128,              lati: 27.916527,              color: "#118452",            }
,            {
              id: "12",              long: 66.397128,              lati: 27.916527,              color: "#118452",            }
,            {
              id: "16",              long: 196.397128,              lati: 67.916527,              color: "#118452",            }
,          ],        }
,      ],    }
    ;
  }
,  methods: {
    top(lati) {
          return ((90 - lati) / 90) * -90 - 10 + "px";
    }
,    rotate(long) {
          let z = (long / 360) * 360;
      return `rotateZ(${
z}
    deg)`;
    }
,  }
,  //   filters: {
}
,}
    ;
    /script>
    style scoPEd lang='scss'>
    $polarPiameter: 180px;
.polar-main {
      width: $polarPiameter;
      height: $polarPiameter;
      position: relative;
  p {
        margin: 0;
  }
  .polar-1 {
        width: $polarPiameter;
        height: $polarPiameter;
        border-style: solid;
    .polar-2 {
          width: $polarPiameter * 2/3;
          height: $polarPiameter * 2/3;
          border-style: dashed;
      .polar-3 {
            width: $polarPiameter/3;
            height: $polarPiameter/3;
            border-style: dashed;
        .polar-center {
              width: 1px;
              height: 1px;
              background-color: #333;
        }
      }
    }
  }
  .line {
        height: $polarPiameter;
        border-right-color: #333;
        border-right-width: 1px;
        border-right-style: solid;
        position: absolute;
        left: 50%;
        cursor: pointer;
  }
  .longitude,  .latitude {
        height: 14px;
        line-height: 14px;
        font-Size: 12px;
        color: #868585;
        position: absolute;
        cursor: pointer;
  }
}
.polar-1,.polar-2,.polar-3,.polar-center {
      border-radius: 50%;
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      margin: auto;
      border-color: #91cc75;
      border-width: 1px;
      box-sizing: border-box;
      cursor: pointer;
}
.polar-1:hover {
      border-width: 2px;
}
.polar-2:hover{
      border-width: 2px;
}
.satellite-box {
      position: absolute;
      width: 1px;
      height: 1px;
      border-radius: 50%;
      background-color: transparent;
  .satellite {
        position: absolute;
        left: -10px;
        width: 20px;
        height: 20px;
        line-height: 20px;
        text-align: center;
        border-radius: 50%;
        font-size: 14px;
        color: #fff;
        cursor: pointer;
        z-index: 999;
        opacity: 0.6;
        transition: 0.6s;
  }
  .satellite:hover {
        background-color: #333 !important;
  }
}
    /style>
    

总结

示例图:

到此这篇关于CSS极坐标的实例代码的文章就介绍到这了,更多相关CSS极坐标内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

CSS

若转载请注明出处: CSS极坐标的实例代码
本文地址: https://pptw.com/jishu/588511.html
html css3不拉伸图片显示效果 关于html选择框创建占位符的问题

游客 回复需填写必要信息