【ECharts】从零实现echarts地图完整代码(纯前端,包含地图资源)

news2024/11/17 0:18:31

最终效果

在这里插入图片描述
在这里插入图片描述

标题环境搭建

这里忽略创建vue项目的操作过程,请自行搭建 vue2 项目less 环境

安装下载 echarts
这里我们选择npm下载

npm install echarts

安装成功后,在 main.js 中把echarts配置到this上

// 引入 echarts
import * as Echarts from 'echarts'
Vue.prototype.$echarts = Echarts

在这里插入图片描述
这里我建立了一个地图的组件,放在hnMap
在这里插入图片描述

静态地图核心代码

获取地图渲染json文件

这里我是通过下述的网址下载需要的地图 json 文件到本地 mapJson 目录下
地图数据下载地址:地图Json数据下载
另外,因为我这里需要下层的阴影(蓝色阴影部分不需要地图内部的轮廓所以需要两种地图格式)

// 获取地图渲染json文件
async registerMapJson () {
  try {
  	// 上层实际的地图轮廓
    const mapFullResources = require(`./mapJson/${this.mapAreaCode}_full.json`)
    // 下层阴影轮廓(不带内部轮廓信息)
    const mapResources = require(`./mapJson/${this.mapAreaCode}.json`)
    // 注册 map
    this.$echarts.registerMap("mapFullJson", mapFullResources);
    this.$echarts.registerMap("mapJson", mapResources);
  } catch (error) {
    throw new Error('地图加载失败,请刷新重试');
  }
},

地图样式核心代码

地图的样式就是通过下述的 option 对象配置的
更详细的文档可见官网echarts官网
主要是配置项、API、GL配置这三项,一般都可以找到详细的解释
在这里插入图片描述

// 设置初始化的地图样式
async setInitOption () {
  let option = {
    tooltip: {
      trigger: 'item',
      formatter: (params) => {
        return `
          <div style="
            line-height: 24px;
            padding: 13px 15px;
            border-top: 1px solid #16D0FE;
            border-bottom: 1px solid #16D0FE;
            background-color: rgba(6,79,124,0.92);
            box-shadow: inset 0 -10px 10px -10px #00B5FF, 0 10px 10px -10px #00B5FF,inset 0 10px 10px -10px #00B5FF, 0 -10px 10px -10px #00B5FF;
            letter-spacing: 0.2em;
            border-radius: 10%;
          ">
            <div>${params.name}</div>
            <div>这是一个tooltip</div>
          </div>
        `;
      },
      textStyle: {
        color: '#ffffff',
        fontSize: 14,
      },
      padding: 0,
      borderRadius: 20,
      borderColor: 'transparent',
      backgroundColor: 'transparent'
    },
    // 地图渲染层级通过 z 属性来控制
    geo: [
      { // 整个地图最外部轮廓的外阴影
        map: 'mapJson',
        z: 3,
        roam: false,
        aspectScale: 0.9, //长宽比
        zoom: 1.1,
        tooltip: {
          show: false,
        },
        label: {
          show: false, // 是否显示对应地名
        },
        layoutCenter: ['50%', '50%'],
        // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
        layoutSize: 650,
        emphasis: { // 对应的鼠标悬浮效果
          disabled: true,
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            areaColor: '#2f9fe7',
            shadowColor: 'rgba(9, 117, 185,0.7)',
            shadowBlur: 15,
            borderWidth: 0,
            shadowOffsetY: 25,
            shadowOffsetX: 5,
          },
          emphasis: {
            disabled: true, //是否可以被选中
          },
        },
      }, { // 中间部分的蓝色阴影-主体部分
        map: 'mapJson', // 表示中国地图
        roam: false,
        z: 2,
        aspectScale: 0.9, //长宽比
        zoom: 1.1,
        tooltip: {
          show: false,
        },
        label: {
          show: false, // 是否显示对应地名
        },
        layoutCenter: ['50%', '57%'],
        // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
        layoutSize: 650,
        emphasis: { // 对应的鼠标悬浮效果
          disabled: true,
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            areaColor: '#38b4fc',
            borderColor: '#6dceff',
            borderWidth: 5,
            // 内部阴影
            shadowColor: 'rgba(9, 117, 185,0.7)',
            shadowBlur: 10,
            shadowOffsetY: -5,
            shadowOffsetX: -5,
          },
          emphasis: {
            disabled: true, //是否可以被选中
          },
        },
      }, { // 最下层阴影
        map: 'mapJson', // 表示中国地图
        roam: false,
        z: 1,
        aspectScale: 0.9, //长宽比
        zoom: 1.3,
        tooltip: {
          show: false,
        },
        label: {
          show: false, // 是否显示对应地名
        },
        layoutCenter: ['51%', '60%'],
        // 如果宽高比大于 1 则宽度为 650,如果小于 1 则高度为 650,保证了不超过 650x650 的区域
        layoutSize: 650,
        emphasis: { // 对应的鼠标悬浮效果
          disabled: true,
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            areaColor: 'rgba(4, 29, 83,0.5)',
            borderWidth: 0,
          },
          emphasis: {
            disabled: true, //是否可以被选中
          },
        },
      }
    ],
    series: [
      {
        type: 'map',
        map: 'mapFullJson',
        // data: this.mapData,
        zoom: 1.1,
        z: 4,
        layoutCenter: ['50%', '50%'],
        // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
        layoutSize: 650,
        aspectScale: 0.9, //长宽比
        roam: false,
        label: {
          show: true,
          fontSize: 14,
          lineHeight: 16,
          padding: 0,
          borderRadius: 5,
          formatter: function (params) {
            // 这里模拟data里的数据
            var min = 40000;
            var max = 160000;
            const value = Math.floor(Math.random() * (max - min + 1)) + min;
            const areaname = params.name
            if (value >= 150000) {
              return `{red|${areaname}}`
            } else if (value >= 100000) {
              return `{orange|${areaname}}`
            } else if (value >= 50000) {
              return `{green|${areaname}}`
            } else {
              return `{blue|${areaname}}`
            }
          },
          rich: {
            // 四种标签样式
            red: {
              color: "#fff",
              padding: 10,
              borderRadius: 3,
              textBorderWidth: 10,
              textShadowBlur: 15,
              textBorderColor: 'rgba(41, 102, 155, 0.2)',
              textShadowColor: 'rgba(41, 102, 155, 1)',
              backgroundColor: 'rgba(255, 0, 0, 0.7)',
            },
            orange: {
              color: "#fff",
              padding: 10,
              borderRadius: 3,
              textBorderColor: 'rgba(3, 40, 103, 0.2)',
              textBorderWidth: 10,
              textShadowColor: 'rgba(3, 40, 103, 1)',
              textShadowBlur: 15,
              backgroundColor: 'rgba(236, 116, 9, 0.8)',
            },
            green: {
              color: "#fff",
              padding: 10,
              borderRadius: 3,
              textBorderColor: 'rgba(3, 40, 103, 0.2)',
              textBorderWidth: 10,
              textShadowColor: 'rgba(3, 40, 103, 1)',
              textShadowBlur: 15,
              backgroundColor: 'rgba(0, 215, 233, 0.8)',
            },
            blue: {
              color: "#fff",
              padding: 10,
              textBorderColor: 'rgba(3, 40, 103, 0.2)',
              textBorderWidth: 10,
              textShadowColor: 'rgba(3, 40, 103, 1)',
              textShadowBlur: 15,
              backgroundColor: 'rgba(8, 136, 255, 0.8)',
            },
          },
        },
        select: {
          disabled: true
        },
        itemStyle: {
          normal: {
            borderColor: {
              type: 'linear',
              x: 0,
              y: 0,
              x2: 0,
              y2: 1,
              colorStops: [{
                offset: 0, color: '#306ca1'
              }, {
                offset: 0.3, color: '#41b8ff'
              }],
            },
            borderWidth: 3,
            areaColor: {
              image: wlImg
            }
          },
          emphasis: {
            areaColor: {
              image: wlImg
            },
            borderColor: '#fff',
            borderWidth: 5,
          },
        },
      },
    ],
    animation: false,
  }
  this.option = option
  return option
},

初始化,渲染地图

// 初始化,渲染地图
renderMap () {
  if (this.myChart) {
    this.myChart.dispose(); // 销毁之前的 echarts 实例
    this.myChart.off('click'); // 解绑 click 事件监听器
  }
  // 保存新的 echarts 实例
  const myChart = this.$echarts.init(document.getElementById("mapEchart"));
  this.myChart = myChart
  myChart.clear()
  myChart.setOption(this.option);
},

根据地区名设置当前位置的定位图标

其实就是使用 scatter 图例,把 symbol 设置为本地的图片就好了

// 定位图标
const markImg = require('./images/mark.png')
setMarkSymbol (selectedAreaName) {
  this.option.series[1] = {
    type: 'scatter',
    coordinateSystem: 'geo',
    z: 12,
    data: [ // 描点数据
      {
        name: selectedAreaName,
        value: mapAddr[selectedAreaName],
      }
    ],
    symbol: `image://${markImg}`,
    symbolSize: [44, 33],
  }
  this.myChart.setOption(this.option);
},

单击下钻事件

其实地图下钻就只需要重新获取点击地址的地图 Json 文件,然后再重新渲染 echarts 即可

// 单击下钻事件
clickMapItem (e) {
  const selectedAreaName = e.name
  const selectedAreaCode = areaCode[selectedAreaName]
  if (selectedAreaCode) {
    // 点击的是市一级的话,下钻重新渲染地图
    this.mapAreaCode = selectedAreaCode
    this.initMapChart()
  } else {
    // 区县一级的话显示定位图标
    this.setMarkSymbol(selectedAreaName)
  }
},

返回省级地图

这里的返回我是直接偷懒做的返回省级地图,当然如果你要做上一级地图的话,只需要用一个数组保存你的地址路径,然后类似下钻功能重新渲染地图。

backToHome () {
  this.mapAreaCode = '430000'
  this.initMapChart()
}

完整 Vue 代码

如果需要源码可以进行资源下载
下载完成后npm install ,再 npm run dev 运行就好啦,如果有任何问题可以问我~

<template>
  <div style="position: relative;">
    <!-- 左上角返回按钮 -->
    <div class="back-box" @click="backToHome" v-show="mapAreaCode != 430000">
      <img src="./images/返回.png">
    </div>
    <!-- 建立一个div用于放地图 canvas -->
    <div style="height: 1000px;width: 1000px;" id="mapEchart"></div>
    <!-- 左下角图例 -->
    <div class="map-tips">
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #FF0000"></div>
        <span>大于 150,000人次 </span>
      </div>
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #FF7800FF"></div>
        <span>大于 100,000人次 </span>
      </div>
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #00D7E9FF"></div>
        <span>大于 50,000人次 </span>
      </div>
      <div class="map-tips-item" style="display: flex">
        <div class="map-bar" style="background-color: #0888FFFF"></div>
        <span>小于 50,000人次 </span>
      </div>
    </div>
  </div>
</template>

<script>
import areaCode from "./config/areaCode";
import mapAddr from "./config/mapAddr";
// 地图纹理
const wlImg = require('./images/纹理.png')
// 定位图标
const markImg = require('./images/mark.png')
export default {
  name: 'hnMap',
  components: {},
  props: {},
  data () {
    return {
      mapAreaCode: '430000', //当前地图展示的行政区划代码(默认为湖南省)
      myChart: null, // echarts 实例
      mapData: [], // 地图上显示的项目申报数据
      debounceTimer: null, // 用于防抖的计时器
    }
  },
  mounted () {
    this.initMapChart()
  },
  methods: {
    async initMapChart () {
      // 获取地图渲染json文件
      await this.registerMapJson()
      // 设置初始化的地图样式
      await this.setInitOption()
      // 初始化,渲染地图
      this.renderMap()
      // 添加点击事件的监听事件
      this.setClickListener()
    },
    // 获取地图渲染json文件
    async registerMapJson () {
      try {
        const mapFullResources = require(`./mapJson/${this.mapAreaCode}_full.json`)
        const mapResources = require(`./mapJson/${this.mapAreaCode}.json`)
        this.$echarts.registerMap("mapFullJson", mapFullResources);
        this.$echarts.registerMap("mapJson", mapResources);
      } catch (error) {
        throw new Error('地图加载失败,请刷新重试');
      }
    },
    // 设置初始化的地图样式
    async setInitOption () {
      let option = {
        tooltip: {
          trigger: 'item',
          formatter: (params) => {
            return `
              <div style="
                line-height: 24px;
                padding: 13px 15px;
                border-top: 1px solid #16D0FE;
                border-bottom: 1px solid #16D0FE;
                background-color: rgba(6,79,124,0.92);
                box-shadow: inset 0 -10px 10px -10px #00B5FF, 0 10px 10px -10px #00B5FF,inset 0 10px 10px -10px #00B5FF, 0 -10px 10px -10px #00B5FF;
                letter-spacing: 0.2em;
                border-radius: 10%;
              ">
                <div>${params.name}</div>
                <div>这是一个tooltip</div>
              </div>
            `;
          },
          textStyle: {
            color: '#ffffff',
            fontSize: 14,
          },
          padding: 0,
          borderRadius: 20,
          borderColor: 'transparent',
          backgroundColor: 'transparent'
        },
        // 地图渲染层级通过 z 属性来控制
        geo: [
          { // 整个地图最外部轮廓的外阴影
            map: 'mapJson',
            z: 3,
            roam: false,
            aspectScale: 0.9, //长宽比
            zoom: 1.1,
            tooltip: {
              show: false,
            },
            label: {
              show: false, // 是否显示对应地名
            },
            layoutCenter: ['50%', '50%'],
            // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
            layoutSize: 650,
            emphasis: { // 对应的鼠标悬浮效果
              disabled: true,
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                areaColor: '#2f9fe7',
                shadowColor: 'rgba(9, 117, 185,0.7)',
                shadowBlur: 15,
                borderWidth: 0,
                shadowOffsetY: 25,
                shadowOffsetX: 5,
              },
              emphasis: {
                disabled: true, //是否可以被选中
              },
            },
          }, { // 中间部分的蓝色阴影-主体部分
            map: 'mapJson', // 表示中国地图
            roam: false,
            z: 2,
            aspectScale: 0.9, //长宽比
            zoom: 1.1,
            tooltip: {
              show: false,
            },
            label: {
              show: false, // 是否显示对应地名
            },
            layoutCenter: ['50%', '57%'],
            // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
            layoutSize: 650,
            emphasis: { // 对应的鼠标悬浮效果
              disabled: true,
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                areaColor: '#38b4fc',
                borderColor: '#6dceff',
                borderWidth: 5,
                // 内部阴影
                shadowColor: 'rgba(9, 117, 185,0.7)',
                shadowBlur: 10,
                shadowOffsetY: -5,
                shadowOffsetX: -5,
              },
              emphasis: {
                disabled: true, //是否可以被选中
              },
            },
          }, { // 最下层阴影
            map: 'mapJson', // 表示中国地图
            roam: false,
            z: 1,
            aspectScale: 0.9, //长宽比
            zoom: 1.3,
            tooltip: {
              show: false,
            },
            label: {
              show: false, // 是否显示对应地名
            },
            layoutCenter: ['51%', '60%'],
            // 如果宽高比大于 1 则宽度为 650,如果小于 1 则高度为 650,保证了不超过 650x650 的区域
            layoutSize: 650,
            emphasis: { // 对应的鼠标悬浮效果
              disabled: true,
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                areaColor: 'rgba(4, 29, 83,0.5)',
                borderWidth: 0,
              },
              emphasis: {
                disabled: true, //是否可以被选中
              },
            },
          }
        ],
        series: [
          {
            type: 'map',
            map: 'mapFullJson',
            // data: this.mapData,
            zoom: 1.1,
            z: 4,
            layoutCenter: ['50%', '50%'],
            // 如果宽高比大于 1 则宽度为 100,如果小于 1 则高度为 100,保证了不超过 100x100 的区域
            layoutSize: 650,
            aspectScale: 0.9, //长宽比
            roam: false,
            label: {
              show: true,
              fontSize: 14,
              lineHeight: 16,
              padding: 0,
              borderRadius: 5,
              formatter: function (params) {
                // 这里模拟data里的数据
                var min = 40000;
                var max = 160000;
                const value = Math.floor(Math.random() * (max - min + 1)) + min;
                const areaname = params.name
                if (value >= 150000) {
                  return `{red|${areaname}}`
                } else if (value >= 100000) {
                  return `{orange|${areaname}}`
                } else if (value >= 50000) {
                  return `{green|${areaname}}`
                } else {
                  return `{blue|${areaname}}`
                }
              },
              rich: {
                // 四种标签样式
                red: {
                  color: "#fff",
                  padding: 10,
                  borderRadius: 3,
                  textBorderWidth: 10,
                  textShadowBlur: 15,
                  textBorderColor: 'rgba(41, 102, 155, 0.2)',
                  textShadowColor: 'rgba(41, 102, 155, 1)',
                  backgroundColor: 'rgba(255, 0, 0, 0.7)',
                },
                orange: {
                  color: "#fff",
                  padding: 10,
                  borderRadius: 3,
                  textBorderColor: 'rgba(3, 40, 103, 0.2)',
                  textBorderWidth: 10,
                  textShadowColor: 'rgba(3, 40, 103, 1)',
                  textShadowBlur: 15,
                  backgroundColor: 'rgba(236, 116, 9, 0.8)',
                },
                green: {
                  color: "#fff",
                  padding: 10,
                  borderRadius: 3,
                  textBorderColor: 'rgba(3, 40, 103, 0.2)',
                  textBorderWidth: 10,
                  textShadowColor: 'rgba(3, 40, 103, 1)',
                  textShadowBlur: 15,
                  backgroundColor: 'rgba(0, 215, 233, 0.8)',
                },
                blue: {
                  color: "#fff",
                  padding: 10,
                  textBorderColor: 'rgba(3, 40, 103, 0.2)',
                  textBorderWidth: 10,
                  textShadowColor: 'rgba(3, 40, 103, 1)',
                  textShadowBlur: 15,
                  backgroundColor: 'rgba(8, 136, 255, 0.8)',
                },
              },
            },
            select: {
              disabled: true
            },
            itemStyle: {
              normal: {
                borderColor: {
                  type: 'linear',
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  colorStops: [{
                    offset: 0, color: '#306ca1'
                  }, {
                    offset: 0.3, color: '#41b8ff'
                  }],
                },
                borderWidth: 3,
                areaColor: {
                  image: wlImg
                }
              },
              emphasis: {
                areaColor: {
                  image: wlImg
                },
                borderColor: '#fff',
                borderWidth: 5,
              },
            },
          },
        ],
        animation: false,
      }
      this.option = option
      return option
    },
    // 初始化,渲染地图
    renderMap () {
      if (this.myChart) {
        this.myChart.dispose(); // 销毁之前的 echarts 实例
        this.myChart.off('click'); // 解绑 click 事件监听器
      }
      // 保存新的 echarts 实例
      const myChart = this.$echarts.init(document.getElementById("mapEchart"));
      this.myChart = myChart
      myChart.clear()
      myChart.setOption(this.option);
    },
    // 添加点击事件监听(防抖)
    setClickListener () {
      this.myChart.on('click', (e) => {

        // 如果点击的是最下面的阴影层,不进行任何操作,因为geo层使用的是不带内部轮廓的json地图
        if (e.componentType === 'geo') {
          return
        }

        this.debounce(this.clickMapItem(e))

      });
    },
    // 防抖函数
    debounce (func, delay = 1000) {
      return (...args) => {
        clearTimeout(this.debounceTimer);
        this.debounceTimer = setTimeout(() => {
          func.call(this, ...args);
        }, delay);
      };
    },
    // 单击事件
    clickMapItem (e) {
      const selectedAreaName = e.name
      const selectedAreaCode = areaCode[selectedAreaName]
      if (selectedAreaCode) {
        // 点击的是市一级的话,下钻重新渲染地图
        this.mapAreaCode = selectedAreaCode
        this.initMapChart()
      } else {
        // 区县一级的话显示定位图标
        this.setMarkSymbol(selectedAreaName)
      }
    },
    /**
     * 根据地区名设置当前位置的定位图标
     * @param {String} selectedAreaName 需要显示定位图标的地区名
     */
    setMarkSymbol (selectedAreaName) {
      this.option.series[1] = {
        type: 'scatter',
        coordinateSystem: 'geo',
        z: 12,
        data: [ // 描点数据
          {
            name: selectedAreaName,
            value: mapAddr[selectedAreaName],
          }
        ],
        symbol: `image://${markImg}`,
        symbolSize: [44, 33],
      }
      this.myChart.setOption(this.option);
    },
    backToHome () {
      this.mapAreaCode = '430000'
      this.initMapChart()
    }
  },
}
</script>
<style lang="less" scoped>
.back-box {
  z-index: 999;
  position: absolute;
  top: 100px;
  cursor: pointer;
}
.map-tips-item {
  display: flex;
  margin-top: 10px;
}
.map-tips {
  position: absolute;
  bottom: 36px;
  left: 10%;
  z-index: 99;
  font-size: 14px;
  color: #9fd1ffff;
  height: 120px;
  width: 200px;
}
.map-bar {
  width: 44px;
  height: 17px;
  margin-right: 16px;
  border-radius: 8%;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1309669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

power EM与signal EM解决办法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 EM问题就是电流密度过高产生的,解决办法核心就是是分流或提高载流能力以及降低电流量。 1.面对power EM,首先检查missing via,补全via,还可以加宽,加密局部power mesh,一些power IO出pin有po…

Unity:Camera讲解之ClearFlags

Clear Flags四个选项讲解: 前三个都是常用的&#xff0c;第四个基本不会用。 skybox(天空盒&#xff09;&#xff1a; 主要是一种用于渲染游戏场景中天空的技术。它是一个包含6个纹理图片的立方体贴图&#xff0c;分别代表了从不同角度观察天空时所看到的前、后、上、下、左…

Gateway网关-路由断言工厂

目录 一、路由断言工厂Route Predicate Factory 二、Predicate工厂配置测试 2.1 After测试 2.2 Before测试 三、回顾 一、路由断言工厂Route Predicate Factory 网关路由可以配置的内容包括: 路由id:路由唯一标示uri:路由目的地&#xff0c;支持lb和http两种predicates: 路…

MySQL之创建表

创建emp表 #创建表的练习 -- 字段 属性 -- Id 整形 -- name 字符型 -- sex 字符型 -- birthday 日期型 -- entry_date 日期型 -- job 字符型 -- Salary 小数型 -- resume 文本型 CREATE TABLE emp(id INT,name VARCHAR(32),sex CHAR(1),birthday DATE,entry_date DAT…

不负春光 只争商机!2024SIA上海轴承展会助您抢起势 定胜势!

〓 2024第十届中国国际轴承工业&#xff08;上海&#xff09;展览会〓 The 10th China International Bearing Industry (Shanghai) Exhibition 2024 展会时间&#xff1a;2024年7月24日-26日 展会地点&#xff1a;上海国家会展中心•虹桥&#xff08;上海市青浦区崧泽大道33…

word图片点击放大,word图片双击放大

网上自己搜了半天&#xff0c;都是顾左右而言他&#xff0c;直接实践一下。 干货就是&#xff1a;调整word视图为阅读模式&#xff0c;双机图片 就能放大查看&#xff0c;然后还会有一个 放大镜供点击放大到整个屏幕。 其实挺好理解的&#xff0c;word跟wps不同&#xff0c;w…

《拥抱变化:解析极限编程》读书笔记

文章目录 一、书名和作者二、书籍概览2.1 主要论点和结构2.2 目标读者和应用场景 三、核心观点与主题3.1开发问题3.2 极限编程实践3.3 极限编程计划与设计3.4 极限编程的实现 四、亮点与启发4.1 最有影响的观点4.2 对个人专业发展的启示 五、批评与局限性5.1 可能存在的争议和过…

常见系统认证实现流程

文章目录 账密登录短信验证码登录扫码登录平台间认证微信一键登录&#xff08;APP&#xff09;微信小程序登录三方账号登录手机号一键登录生物识别登录 账密登录 参数&#xff08;账号、密码、登录终端编号&#xff09;校验&#xff0c;密码正则校验获取请求头看请求是否携带该…

Python编程基础:IDE编译直接报错了,即使不明白也要去参考系统给的提示

文章目录 1、错误信息2、解决过程2.1、结论2.2、正解 3、不要盲目相信自己百度的能力 1、错误信息 SyntaxError: Non-UTF-8 code starting with ‘\xe8’ in file D:\xxxx\scripts\testjson.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/…

css未来:使用light-dark()切换主题色

css未来&#xff1a;使用light-dark()切换主题色 要根据使用的是浅色模式还是深色模式来更改颜色&#xff0c;我们通常会使用 prefers-color-scheme 媒体查询。为了让代码实现变得更容易&#xff0c;CSS 现在附带了一个名为 light-dark() 的实用函数。该函数接受两个颜色值作为…

国密SSL证书有哪些?一起来看国密SSL证书品牌大合集

早在2011年&#xff0c;我国国家密码管理局就已经对网络安全高度重视&#xff0c;在《关于做好公钥密码算法升级工作的通知》中&#xff0c;明确提出在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。并随之陆续颁布了《网络安全法》、《密码法》、《关键…

【数据结构(十·树结构的实际应用)】平衡二叉树(5)

文章目录 前言1. 基本概念2. 应用案例2.1. 左旋转(单旋转)2.1.1. 思路分析2.1.2. 代码实现 2.2. 右旋转(单旋转)2.2.1. 思路分析2.2.2. 代码实现 2.3. 双旋转2.3.1. 问题情景2.3.2. 思路分析2.3.3. 代码实现 前言 二叉排序树可能存在的问题&#xff1a; 看一个案例(说明二叉排…

Amazon Connect ,全渠道云联络中心

Amazon Connect &#xff0c;全渠道云联络中心 前言一. Amazon Connect 介绍 &#x1f5fa;️二. Amazon Connect 使用教程 &#x1f5fa;️1.我们打开URl链接找到对应服务2.输入Amazon Connect选中第一个点击进入即可&#xff1b;3.在进入之后我们就开始创建实例&#xff0c;点…

【方法】如何给Word文档添加水印?

想要保护文档内容的原创性&#xff0c;我们可以给文档添加上水印来做个防伪标记&#xff0c;防范文件内容被盗用。 有些小伙伴还不知道Word在哪里设置添加水印&#xff0c;接下来分享一个添加水印的教程&#xff0c;一起学习一下吧。 1. 打开需要添加水印的Word文档&#xff…

【源码复现】《Towards Deeper Graph Neural Networks》

目录 1、论文简介2、论文核心介绍2.1、基本概述2.2、模型介绍 3、源码复现3.1、torch复现3.2、DGL复现 1、论文简介 论文题目——《Towards Deeper Graph Neural Networks》论文作者——Meng Liu, Hongyang Gao & Shuiwang Ji论文地址——Towards Deeper Graph Neural Net…

如何给pycharm配置解释器

目录 给pycharm配置解释器 给pycharm配置解释器 选择show all 选择已经存在的环境 其中的py38是我通过conda创建的虚拟环境。

BearPi Std 板从入门到放弃 - 筑基(1)(RT-Thread 智慧路灯)

简介 使用BearPi IOT Std开发板及其扩展板E53_SC1&#xff0c; SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM AT24C02&#xff0c; 智慧路灯功能, 实现亮度达到对应阈值则开启点灯 主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C…

排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序

排序算法(二) 前面介绍了排序算法的时间复杂度和空间复杂数据结构与算法—排序算法&#xff08;一&#xff09;时间复杂度和空间复杂度介绍-CSDN博客&#xff0c;这次介绍各种排序算法——冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序。 文章目录 排序算法(二)…

transformer文章翻译【Attention is all you need】

参考博客&#xff1a;https://blog.csdn.net/nocml/article/details/103082600 论文目录 摘要1. Introduction2. Background3. Model Architecture3.1 Encoder and Decoder Stacks3.2 Attention3.2.1 Scaled Dot-Product Attention3.2.2 Multi-Head Attention3.2.3 Application…

实验室移液器配套PFA吸头性能稳定特氟龙吸头特点

PFA吸头是一种高性能移液器配件&#xff0c;由聚全氟丙烯&#xff08;Perfluoroalkoxy&#xff09;材料制成。这种材料具有优异的耐化学品、耐热和电绝缘性能&#xff0c;使得PFA吸头在应用中表现出色。 首先&#xff0c;PFA吸头具有卓越的耐化学腐蚀性能。无论是酸性溶液、碱性…