微信小程序与echarts联动安卓真机测试出现黑色阴影

问题

这个问题想了很多的可能性,因为安卓机上显示不正常,苹果系统正常,去小红书上搜索,发现可能是安卓硬件加速的问题。

think

1.是因为黑色标题存在,导致的黑色阴影,删除了标题和修改字体颜色之后,发现不对

2.可能是echarts版本的问题,切换echarts版本可以看下面这个链接,但是柱状图正常显示,饼图的标题和图例不正常显示,并且切换ecahrts版本之后,原本的图表展示出现问题

https://developers.weixin.qq.com/community/develop/article/doc/000ec2223a43881b1eb0e644b61c13https://developers.weixin.qq.com/community/develop/article/doc/000ec2223a43881b1eb0e644b61c133.可能是Canvas和svg渲染的问题,但是微信小程序只能用canvas的渲染方式。

4.chatgpt告诉我说,是因为饼图和柱状图的展示形式不一样,和canvas + filter/opacity/transform这些微信平台的东西有关

5.解决方法,就是将title和legend隐藏,手动加入title和legend

解决方法

第一步:修改wxml

复制代码
  <view class="card mb_30">
    <!-- 标题 -->
    <view class="chart-title">
      1.驻村干部按性别统计数量(人)
    </view>
    <!-- 图表 + legend -->
    <view class="chart-row">
      <!-- ECharts -->
      <ec-canvas class="chart-canvas" id="genderTrend" canvas-id="genderTrend" ec="{{ genderEc }}"/>
      <!-- 自定义 legend -->
      <view class="chart-legend">
        <view class="legend-item" wx:for="{{  genderData }}" wx:key="name">
          <view class="legend-color" style="background-color: {{ item.color }};"></view>
          <view class="legend-text">
            <text class="name">{{item.name}}</text>
            <text class="value">{{ item.value }}人</text>
            <text class="percent">{{ item.percent }}%</text>
          </view>
        </view>
      </view>
    </view>
  </view>

第二步:修改wxss

复制代码
/* 标题 */
 .chart-title {
  font-size: 30rpx;
  /* font-weight: 600; */
  color: #333;
  margin-bottom: 100rpx;
}

/* 横向布局 */
 .chart-row {
  display: flex;
  flex-direction: row;
  align-items: center;
}

/* canvas */
 .chart-canvas {
  width: 320rpx;
  height: 320rpx;
}

/* legend 区 */
 .chart-legend {
  flex: 1;
  padding-left: 50rpx;
}

/* legend 每一行 */
 .legend-item {
  display: flex;
  align-items: center;
  margin-bottom: 20rpx;
}

/* 颜色块 */
 .legend-color {
  width: 20rpx;
  height: 20rpx;
  border-radius: 4rpx;
  margin-right: 12rpx;
}

/* 文本 */
 .legend-text {
  font-size: 24rpx;
  color: #333;
}

 .legend-text .name {
  margin-right: 12rpx;
}
.legend-text .value {
  margin-right: 12rpx;
  color: #666;
}

.legend-text .percent {
  margin-left: 12rpx;
  color: #999;
}

第三步:在title和legend当中设置show:false

发现饼图的占比还是很小,于是调整饼图在页面当中的大小,通过grid和series当中进行调整饼图颜色和位置。

复制代码
  gird: {
    x: 25,
    y: 45,
    x2: 5,
    y2: 20,
  },

series: [{
    type: 'pie',
    radius: '90%',
    label: {
      show: false
    },
    center: ['50%', '50%'],
    data: [],
    itemStyle: {
      normal: {
        color: function (colors) {
          var colorList = [
            '#FF00FF',
            '#228B22',
            '#B22222',
            '#1E90FF',
            '#696969',
            '#FF1493',
            '#FF8C00',
            '#BDB76B',
            '#B8860B',
            '#00008B',
            '#D2691E',
            '#7FFF00'
          ];
          return colorList[colors.dataIndex];
        },
        shadowBlur: 10,
        shadowColor: 'transparent'
      }
    },
    emphasis: {
      itemStyle: {
        shadowBlur: 10,
        shadowColor: 'transparent'
      }
    }
  }]

第四步:进行数据处理。用于在wxml当中展示

我的代码

复制代码
// 计算总价值  
             const totalValue = m.reduce((sum, item) => sum + item.value, 0);
             const colors = [
               '#FF00FF',
               '#228B22',
               '#B22222',
               '#1E90FF',
               '#696969',
               '#FF1493',
               '#FF8C00',
               '#BDB76B',
               '#B8860B',
               '#00008B',
               '#D2691E',
               '#7FFF00'
             ]
             // 转换数据
             const areaData = m.map((item, index) => ({
               name: item.name,
               value: item.value,
               percent: parseFloat((item.value / totalValue * 100).toFixed(2)),
               color: colors[index] // 循环使用颜色
             }));
             this.setData({
              areaData: areaData
             })
          areaOption.series[0].data = m

总结

发现自己处理bug的方法还是有点幼稚,有点低效率,可能这就是和别人差距体现的原因

相关推荐
一水鉴天12 分钟前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
杨杰39815 分钟前
我给嵌入式设备写了个 6MB 的 JavaScript 运行时(xuan)
javascript
栖凤23 分钟前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
粥里有勺糖23 分钟前
视野修炼第136期 | 前端小恐龙"Deno"被收购
前端·github·ai编程
修炼的dance28 分钟前
页面塞了13.88 MB字体,导出的PDF只有71 KB
前端
qq_3691736329 分钟前
如何将 AI 生成的 HTML 网页发布成在线链接?不用自己搭建服务器
前端·人工智能·html·效率工具·html 发布
FX1317887KP_32 分钟前
从KET到PET口语进阶:词汇量翻倍后,口语如何跟上?
小程序·ket口语·pet口语·fce备考·剑桥英语
风花一世月36 分钟前
⚡ 我把一座含氢能源园区搬进了浏览器(五类能流实时算守恒,在线直接玩)
前端·人工智能
羲云1 小时前
Claude 越界事件之后:Agent 权限设计为什么不能只靠提示词
前端
行者全栈架构师1 小时前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构