Echarts 地图使用,以及tooltip轮播使用

2023-10-29

一,首先下载Echarts

npm install echarts --save

二,引入Echarts

全局引入main.js中

// echarts-4.0
import echarts from 'echarts'
Vue.prototype.$echarts = echarts

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

页面使用

let myChart = this.$echarts.init(document.getElementById('map'))

局部引入在页面

import * as echarts from "echarts";

页面使用

let myChart = echarts.init(document.getElementById("map"));

三,使用Echarts地图组件创建地图

注意4.0和5.0区别
5.0之前Echarts是有地图数据的
5.0之后Echarts就取消了地图数据了
这里我用的是4.0的地图然后引用Echarts自带的地图数据

import "../../node_modules/echarts/map/js/china"; // 引入中国地图  注意是4.0才有 不然会报错

使用Echarts地图组件

methods: {
    //中国地图
    chinaMap() {
      let myChart = echarts.init(document.getElementById("map")); // 初始echarts
      let option = {
        // 绘制地图
        tooltip: {
          // 提示框信息配置
          // triggerOn: "click", // 触发方式
          trigger: "item", // 对象
          // backgroundColor:'#6950a1',
          formatter: (params) => {
            // 格式化提示框信息。 若要访问 data中的数据则要用箭头函数
            return `${params.name} <br/> 
                      地区ID: ${
                        this.arrMap.find((item) => item.name === params.name)
                          ?.id ?? 0
                      }`;
          },
        },
        series: [
          // 配置地图
          {
            type: "map", // 类型
            mapType: "china", // 地图名称,要和引入的地图名一致
            roam: true, // 是否开启鼠标缩放和平移漫游
            label: {
              // 地图省份模块配置
              normal: { show: true }, // 是否显示省份名称
              position: "right", // 显示位置
            },
            emphasis: {
              // 高亮状态下的多边形和标签样式。
              label: {
                show: true, // 是否显示标签。
              },
            },
            itemStyle: {
              //地图区域的多边形图形样式
              normal: {
                areaColor: "#2a5caa", //地图区域颜色
                borderColor: "#afb4db", //图形的描边颜色
                borderWidth: 1, //描边线宽。为 0 时无描边
                borderType: "solid", // 边框样式
                opacity: 0.6, // 透明度
              },
            },
            data: this.arrMap, // 提示框的数据源
          },
        ],
      };
      myChart.setOption(option);
    },

地图就出来了
在这里插入图片描述

四,tooltip轮播(Echarts所有组件都可用)

首先创建一个tooltip-auto-show-vue.js文件 放在util中

/**
 * echarts tooltip轮播
 * @param chart ECharts实例
 * @param chartOption echarts的配置信息
 * @param options object 选项
 * {
 *  interval    轮播时间间隔,单位毫秒,默认为2000
 *  loopSeries  boolean类型,默认为false。
 *              true表示循环所有series的tooltip,false则显示指定seriesIndex的tooltip
 *  seriesIndex 默认为0,指定某个系列(option中的series索引)循环显示tooltip,
 *              当loopSeries为true时,从seriesIndex系列开始执行。
 *  updateData  自定义更新数据的函数,默认为null;
 *              用于类似于分页的效果,比如总数据有20条,chart一次只显示5条,全部数据可以分4次显示。
 * }
 * @returns {{clearLoop: clearLoop}|undefined}
 */
 export function loopShowTooltip(chart, chartOption, options) {
    let defaultOptions = {
      interval: 2000,
      loopSeries: false,
      seriesIndex: 0,
      updateData: null,
    };
  
    if (!chart || !chartOption) {
      return;
    }
  
    let dataIndex = 0; // 数据索引,初始化为-1,是为了判断是否是第一次执行
    let seriesIndex = 0; // 系列索引
    let timeTicket = 0;
    let seriesLen = chartOption.series.length; // 系列个数
    let dataLen = 0; // 某个系列数据个数
    let chartType; // 系列类型
    let first = true;
    let lastShowSeriesIndex = 0;
    let lastShowDataIndex = 0;
  
    if (seriesLen === 0) {
      return;
    }
  
    // 待处理列表
    // 不循环series时seriesIndex指定显示tooltip的系列,不指定默认为0,指定多个则默认为第一个
    // 循环series时seriesIndex指定循环的series,不指定则从0开始循环所有series,指定单个则相当于不循环,指定多个
    // 要不要添加开始series索引和开始的data索引?
  
    if (options) {
      options.interval = options.interval || defaultOptions.interval;
      options.loopSeries = options.loopSeries || defaultOptions.loopSeries;
      options.seriesIndex = options.seriesIndex || defaultOptions.seriesIndex;
      options.updateData = options.updateData || defaultOptions.updateData;
    } else {
      options = defaultOptions;
    }
  
    // 如果设置的seriesIndex无效,则默认为0
    if (options.seriesIndex < 0 || options.seriesIndex >= seriesLen) {
      seriesIndex = 0;
    } else {
      seriesIndex = options.seriesIndex;
    }
  
    /**
     * 清除定时器
     */
    function clearLoop() {
      if (timeTicket) {
        clearInterval(timeTicket);
        timeTicket = 0;
      }
  
      chart.off('mousemove', stopAutoShow);
      zRender.off('mousemove', zRenderMouseMove);
      zRender.off('globalout', zRenderGlobalOut);
    }
  
    /**
     * 取消高亮
     */
    function cancelHighlight() {
      /**
       * 如果dataIndex为0表示上次系列完成显示,如果是循环系列,且系列索引为0则上次是seriesLen-1,否则为seriesIndex-1;
       * 如果不是循环系列,则就是当前系列;
       * 如果dataIndex>0则就是当前系列。
       */
      let tempSeriesIndex =
        dataIndex === 0
          ? options.loopSeries
            ? seriesIndex === 0
              ? seriesLen - 1
              : seriesIndex - 1
            : seriesIndex
          : seriesIndex;
      let tempType = chartOption.series[tempSeriesIndex].type;
  
      if (tempType === 'pie' || tempType === 'radar' || tempType === 'map') {
        chart.dispatchAction({
          type: 'downplay',
          seriesIndex: lastShowSeriesIndex,
          dataIndex: lastShowDataIndex,
        }); // wait 系列序号为0且循环系列,则要判断上次的系列类型是否是pie、radar
      }
    }
  
    /**
     * 自动轮播tooltip
     */
    function autoShowTip() {
      let invalidSeries = 0;
      let invalidData = 0;
      function showTip() {
        // chart不在页面中时,销毁定时器
        let dom = chart.getDom();
        if (document !== dom && !document.documentElement.contains(dom)) {
          clearLoop();
          return;
        }
  
        // 判断是否更新数据
        if (
          dataIndex === 0 &&
          !first &&
          typeof options.updateData === 'function'
        ) {
          options.updateData();
          chart.setOption(chartOption);
        }
  
        let series = chartOption.series;
        let currSeries = series[seriesIndex];
        if (
          !series ||
          series.length === 0 ||
          !currSeries ||
          !currSeries.type ||
          !currSeries.data ||
          !currSeries.data.length
        ) {
          return;
        }
  
        chartType = currSeries.type; // 系列类型
        dataLen = currSeries.data.length; // 某个系列的数据个数
  
        let tipParams = {
          seriesIndex: seriesIndex,
        };
        switch (chartType) {
          case 'pie':
            // 处理饼图中数据为0或系列名为空的不显示tooltip
            if (
              !currSeries.data[dataIndex].name ||
              currSeries.data[dataIndex].name === '空' ||
              !currSeries.data[dataIndex].value
            ) {
              invalidData += 1;
              dataIndex = (dataIndex + 1) % dataLen;
              if (options.loopSeries && dataIndex === 0) {
                // 数据索引归0表示当前系列数据已经循环完
                // 无效数据个数个总数据个数相等,则该系列无效
                if (invalidData === dataLen) {
                  invalidSeries += 1;
                }
  
                // 新系列,重置无效数据个数
                invalidData = 0;
  
                // 系列循环递增1
                seriesIndex = (seriesIndex + 1) % seriesLen;
                // 系列数循环至起始值时重置无效系列数
                if (seriesIndex === options.seriesIndex) {
                  if (seriesLen !== invalidSeries) {
                    // 下一次系列轮回,重置无效系列数
                    invalidSeries = 0;
                    showTip();
                  } else {
                    // 下一次系列轮回,重置无效系列数
                    invalidSeries = 0;
                    clearLoop();
                  }
                } else {
                  showTip();
                }
              } else if (!options.loopSeries && dataIndex === 0) {
                if (dataLen !== invalidData) {
                  invalidData = 0;
                  showTip();
                } else {
                  invalidData = 0;
                  clearLoop();
                }
              } else {
                showTip();
              }
  
              return;
            }
          // eslint-disable-next-line no-fallthrough
          case 'map':
          case 'chord':
            tipParams.name = currSeries.data[dataIndex].name;
            break;
          case 'radar': // 雷达图
            tipParams.seriesIndex = seriesIndex;
            // tipParams.dataIndex = dataIndex;
            break;
          case 'lines': // 线图地图上的lines忽略
            dataIndex = 0;
            seriesIndex = (seriesIndex + 1) % seriesLen;
            invalidSeries++; // 记录无效系列数,如果无效系列数和系列总数相等则取消循环显示
            if (seriesLen !== invalidSeries) {
              showTip();
            } else {
              clearLoop();
            }
            return;
          default:
            tipParams.dataIndex = dataIndex;
            break;
        }
  
        if (chartType === 'pie' || chartType === 'radar' || chartType === 'map') {
          if (!first) {
            cancelHighlight();
          }
  
          // 高亮当前图形
          chart.dispatchAction({
            type: 'highlight',
            seriesIndex: seriesIndex,
            dataIndex: dataIndex,
          });
        }
  
        // 显示 tooltip
        tipParams.type = 'showTip';
        chart.dispatchAction(tipParams);
  
        lastShowSeriesIndex = seriesIndex;
        lastShowDataIndex = dataIndex;
  
        dataIndex = (dataIndex + 1) % dataLen;
        if (options.loopSeries && dataIndex === 0) {
          // 数据索引归0表示当前系列数据已经循环完
          invalidData = 0;
          seriesIndex = (seriesIndex + 1) % seriesLen;
          if (seriesIndex === options.seriesIndex) {
            invalidSeries = 0;
          }
        }
  
        first = false;
      }
  
      showTip();
      timeTicket = setInterval(showTip, options.interval);
    }
  
    // 关闭轮播
    function stopAutoShow() {
      if (timeTicket) {
        clearInterval(timeTicket);
        timeTicket = 0;
  
        if (chartType === 'pie' || chartType === 'radar' || chartType === 'map') {
          cancelHighlight();
        }
      }
    }
  
    let zRender = chart.getZr();
  
    function zRenderMouseMove(param) {
      if (param.event) {
        // 阻止canvas上的鼠标移动事件冒泡
        // param.event.cancelBubble = true;
      }  
      stopAutoShow();
    }
  
    // 离开echarts图时恢复自动轮播
    function zRenderGlobalOut() {
      // console.log("移出了")
      // console.log(timeTicket)
      if (!timeTicket) {
        autoShowTip();
      }
    }
  
    // 鼠标在echarts图上时停止轮播
    chart.on('mousemove', stopAutoShow);
    zRender.on('mousemove', zRenderMouseMove);
    zRender.on('globalout', zRenderGlobalOut);
  
    autoShowTip();
  
    return {
      clearLoop: clearLoop
    };
  }

在页面引用tooltip-auto-show-vue.js

import { loopShowTooltip } from "../util/tooltip-auto-show-vue"; // 文件位置参考自己的位置

在地图的方法里面调用tooltipMap()方法

methods:{
	tooltipMap(myChart,option) {
	      this.tootipTimer && this.tootipTimer.clearLoop(); // this.tootipTimer 在data里定义
	      this.tootipTimer = 0;
	      // 调用轮播的方法
	      // myChart为Echarts容器实例
	      this.tootipTimer = loopShowTooltip(myChart, option, {
	        interval: 5000, // 轮播间隔时间
	        loopSeries: true, // 是否开启轮播循环
	        // shunXu: "daoXu", // 显示顺序
	        // loopSeries: boolean类型,默认为false。true表示循环所有series的tooltip;false则显示指定seriesIndex的tooltip。
	        // seriesIndex: 默认为0,指定某个系列(option中的series索引)循环显示tooltip,当loopSeries为true时,从seriesIndex系列开始执行。
	      });
	  },
}

这样就可以实现tootip自动轮播了 下面附上全部代码

<template>
	<div class='mapEcharts'>
		<div id="map" style="width: 100%; height: 100%"></div>
	</div>
</template>
<script>
import { chageMapApi } from "../api/getapi.js";
import * as echarts from "echarts";
import "../../node_modules/echarts/map/js/china"; // 引入中国地图
import { loopShowTooltip } from "../util/tooltip-auto-show-vue"; // 文件位置参考自己的位置
export default {
  name: "HelloWorld",
  props: {
    msg: String,
  },
  data() {
    return {
      arrMap: [], //数据
      tootipTimer: "",
    };
  },
  mounted() {
    this.dataMap();
  },
  methods: {
    //中国地图
    chinaMap() {
      let myChart = echarts.init(document.getElementById("map")); // 初始echarts
      let option = {
        // 绘制地图
        tooltip: {
          // 提示框信息配置
          // triggerOn: "click", // 触发方式
          trigger: "item", // 对象
          // backgroundColor:'#6950a1',
          formatter: (params) => {
            // 格式化提示框信息。 若要访问 data中的数据则要用箭头函数
            return `${params.name} <br/> 
                      地区ID: ${
                        this.arrMap.find((item) => item.name === params.name)
                          ?.id ?? 0
                      }`;
          },
        },
        series: [
          // 配置地图
          {
            type: "map", // 类型
            mapType: "china", // 地图名称,要和引入的地图名一致
            roam: true, // 是否开启鼠标缩放和平移漫游
            label: {
              // 地图省份模块配置
              normal: { show: true }, // 是否显示省份名称
              position: "right", // 显示位置
            },
            emphasis: {
              // 高亮状态下的多边形和标签样式。
              label: {
                show: true, // 是否显示标签。
              },
            },
            itemStyle: {
              //地图区域的多边形图形样式
              normal: {
                areaColor: "#2a5caa", //地图区域颜色
                borderColor: "#afb4db", //图形的描边颜色
                borderWidth: 1, //描边线宽。为 0 时无描边
                borderType: "solid", // 边框样式
                opacity: 0.6, // 透明度
              },
            },
            data: this.arrMap, // 提示框的数据源
          },
        ],
      };
      myChart.setOption(option);
      //tooltip 轮播
      this.tooltipMap(myChart,option)
    },
    //中国地图数据
    dataMap() {
      chageMapApi(
        "http://hhrc.com.cn/api/report/university/city/list",
        "get"
      ).then((res) => {
        let code = res.data.code;
        if (code == 200) {
          this.arrMap = res.data.data;
          this.chinaMap();
        }
      });
    },
    tooltipMap(myChart,option) {
      this.tootipTimer && this.tootipTimer.clearLoop(); // this.tootipTimer 在data里定义
      this.tootipTimer = 0;
      // 调用轮播的方法
      // myChart为Echarts容器实例
      this.tootipTimer = loopShowTooltip(myChart, option, {
        interval: 5000, // 轮播间隔时间
        loopSeries: true, // 是否开启轮播循环
        // shunXu: "daoXu", // 显示顺序
        // loopSeries: boolean类型,默认为false。true表示循环所有series的tooltip;false则显示指定seriesIndex的tooltip。
        // seriesIndex: 默认为0,指定某个系列(option中的series索引)循环显示tooltip,当loopSeries为true时,从seriesIndex系列开始执行。
      });
  },
  },
};
</script>
<style>
.el-header {
  background-color: palegreen;
}
.el-aside {
  background-color: palevioletred;
}
.el-main {
  background-color: #ccc;
}
.el-aside,
.el-container,
.hello,
#app,
html,
body {
  height: 100%;
}
#map {
  /* background: red; */
}
</style>

补充方法
在utli文件中创建tooltip.js文件

export function autoHover(myChart, option, num, time) {
	var defaultData = {
		// 设置默认值
		time: 2000,
		num: 100
	}
	if (!time) {
		time = defaultData.time
	}
	if (!num) {
		num = defaultData.num
	}
	var count = 0
	var timeTicket = null
	timeTicket && clearInterval(timeTicket)
	timeTicket = setInterval(function () {
		myChart.dispatchAction({
			type: 'downplay',
			seriesIndex: 0 // serieIndex的索引值   可以触发多个
		})
		myChart.dispatchAction({
			type: 'highlight',
			seriesIndex: 0,
			dataIndex: count
		})
		myChart.dispatchAction({
			type: 'showTip',
			seriesIndex: 0,
			dataIndex: count
		})
		count++
		if (count >= num) {
			count = 0
		}
	}, time)
	myChart.on('mouseover', function (params) {
		clearInterval(timeTicket)
		myChart.dispatchAction({
			type: 'downplay',
			seriesIndex: 0
		})
		myChart.dispatchAction({
			type: 'highlight',
			seriesIndex: 0,
			dataIndex: params.dataIndex
		})
		myChart.dispatchAction({
			type: 'showTip',
			seriesIndex: 0,
			dataIndex: params.dataIndex
		})
	})

	myChart.on('mouseout', function () {
		timeTicket && clearInterval(timeTicket)
		timeTicket = setInterval(function () {
			myChart.dispatchAction({
				type: 'downplay',
				seriesIndex: 0 // serieIndex的索引值   可以触发多个
			})
			myChart.dispatchAction({
				type: 'highlight',
				seriesIndex: 0,
				dataIndex: count
			})
			myChart.dispatchAction({
				type: 'showTip',
				seriesIndex: 0,
				dataIndex: count
			})
			count++
			if (count >= 17) {
				count = 0
			}
		}, 3000)
	})
}
export default {
	autoHover
}

在页面中使用

import {autoHover } from '../util/tools.js'

在Echarts实例中去使用 适用于地图和折线图亲测有效

autoHover(myChart, this.option, 4, 3000); // 参数分别为:容器,配置,轮播数量,轮播间隔时间
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Echarts 地图使用,以及tooltip轮播使用 的相关文章

  • setInterval() 如何影响性能?

    我们正在使用 Twitter Bootstrap 作为框架构建一个 Web 应用程序 但在显示 隐藏工具提示时遇到问题 除了尝试找到实际问题的解决方案之外 我还有一个关于我们同时使用的解决方法的问题 从性能角度来看 使用 setInterv
  • chai-http/superagent : 设置多部分表单字段的 Content-Type

    在集成测试中上传文件如下 chai request server instance post profile photo 0 set Access Token accessToken set API Key testConfig apiKe
  • Heroku 上重启后 Better-SQLite3 数据库重置

    我有一个 Discord 机器人better sqlite3 https github com JoshuaWise better sqlite3硬币和 XP 数据库 直到两周前它一直工作得很好 现在 每次重新启动后 它只会恢复 XP 和硬
  • 在 Node.js 中实现服务器发送事件的简单方法?

    我环顾四周 似乎在 Node js 中实现 SSE 的所有方法都是通过更复杂的代码 但似乎应该有一种更简单的方法来发送和接收 SSE 是否有任何 API 或模块可以让这件事变得更简单 这是一个每秒发送一个服务器发送事件 SSE 的 Expr
  • ELEMENT.style.color 在 IE 中不起作用

    在一个小型 Web 应用程序中 我使用 JavaScript 在文本框中设置一些文本及其颜色 在下面的片段中 el 是我的对象 这段代码在 Firefox Opera 和 Safari 下产生了正确的效果 但在 IE 下却没有这样的运气 我
  • 匹配 JavaScript RegEx 中的不可见字符

    我有一些包含不可见字符的字符串 但它们位于可预测的位置 通常 围绕我想要提取的文本片段 然后在第二次出现之后我想保留文本的其余部分 我似乎不知道如何关闭隐形字符 and将它们从我的结果中排除 为了匹配隐形 我一直在使用这个正则表达式 xA0
  • 无法使用 MV3 从 Firefox 下的通用脚本导出到 background.js

    我试图在服务工作者 background js 和内容脚本之间重用一些功能 https stackoverflow com questions 73421706 how to reuse a javascript function betw
  • JSSOR - 无法读取未定义的类型属性“currentStyle”

    我正在尝试将 Jssor 滑块实现到我的页面中 但我不断在标题中出现该错误 我的内容是通过 Javascript 动态创建的 如下所示 var slide app createHTML div id inventorySlides null
  • 可拖动的非模态弹出窗口 Jquery Mobile

    我希望在 Jquery mobile 中有一个弹出窗口 它不会阻止用户与页面交互 并且 data dismissible false 即当页面的另一部分与页面的另一部分交互并保持可见时 弹出窗口不会消失 我已经尝试过这个 popupNew
  • Java:从 ScriptEngine javascript 返回一个对象

    我正在尝试使用 Java 来评估 javascript脚本引擎 https docs oracle com javase 7 docs api javax script ScriptEngine html班级 这是我正在尝试做的事情的一个简
  • Puppeteer 无法在 VPS (DigitalOcean) 上工作

    我在水滴中数字海洋 https www digitalocean com 我收到这个错误 node 5549 UnhandledPromiseRejectionWarning TimeoutError Navigation Timeout
  • ExpressJS - 提供通用 Nuxt 应用程序和 AngularJS SPA

    我有一个具有以下结构的博客项目 服务器 用 Node Express 编写 管理员 AngularJS SPA public AngularJS SPA 目前 管理部分和公共部分具有相同的域 但管理部分使用不同的子域 这允许我在 Expre
  • 输入和文本区域可以拖动吗?

    MDN 规范以及我能通过 Google 找到的每个网站都说所有 HTML 元素都可以拖动 然而 在实践中 我发现我无法拖动文本输入或文本区域 即使它们已被禁用 例如 使用以下代码 img src http www placehold it
  • 在流星收集加载时显示加载程序

    我有一个模板 task list 看起来像这样 each tasks gt task each Template task list tasks返回一个集合 在用户界面中 加载似乎需要一些时间 当集合正在加载时 我想显示一个加载指示器 关于
  • Nuxt + Vuex - 如何将 Vuex 模块分解为单独的文件?

    在 Nuxt 文档中 here https nuxtjs org guide vuex store module files 它说 您可以选择将模块文件分解为单独的文件 state js actions js mutations js an
  • 有没有办法显示嵌套在 Grid 组件内的 Material-UI 抽屉?

    我正在使用 Material UI 创建一个 Web 应用程序 主页分为 3 个网格 每个网格有一个height of 500px 我想在中间网格内显示一个带有一些操作选项的抽屉 那可能吗 到目前为止 我只能在整个屏幕上显示它 这是我的主要
  • 如何使用 javascript 迭代文件系统目录和文件?

    我正在使用 Javascript 编写一个应用程序 该应用程序将与 Phonegap 一起使用来制作 Android 应用程序 我正在使用 Phonegap File API 来读取目录和文件 相关代码如下所示 document addEv
  • 关于 Node.js Promise then 和 return?

    我对承诺感到困惑 I use 那么就答应没有返回像这样 new Promise resolve reject gt resolve 1 then v1 gt console log v1 new Promise resolve reject
  • 如何使用正则表达式解析 OCC 选项符号?

    OCC 选项符号由 4 部分组成 标的股票或 ETF 的根代码 用空格填充至 6 个字符 到期日期 6 位数字 格式为 yymmdd 期权类型 P 或 C 用于看跌或看涨期权 执行价格 为价格 x 1000 前面填充 0 至 8 位数字 举
  • d3.js 更新视觉效果

    我有一个与 d3 js 放在一起的树形图 我通过 getJSON 填充数据 效果很好 但是 我在 setInterval 方法中具有此功能 并且它似乎并没有刷新自身 var treemap d3 layout treemap padding

随机推荐

  • Idea工具的使用

    文章目录 一 IDEA的使用 二 IDEA工具的快捷键以及一些简单的设置 1 字体设置 2 快速生成main方法 psvm 3 快速生成System out println sout 4 注意 IEDA是自动保存 不需要ctrl s 5 删
  • Python+Opencv 提取图片中某种颜色组成的图形

    主要目标识别图中红色的裂缝 尝试了几种不同的方法 最后发现比较每一点的RGB差值可以很好的解决这个问题 也就是提取图片中的红色相关信息 处理结果如下 实现的代码如下 注意opencv读入的图片通道顺序是bgr import cv2 impo
  • AWG线规对照表

    AWG American Wire Gauge 是美国电线标准的简称 AWG值是导线直径 以英寸计 的单位 其中 4 0表示0000 3 0表示000 2 0表示00 1 0表示0 例如 常用的电话线直径为26AWG 约为0 4mm 下表是
  • 停更一次博客

    明天微机原理复习 下周补两次博客
  • scala 的模式匹配与类型系统

    主要内容 1 scala模式匹配 2 scala类型系统 scala模式匹配 scala中的模式匹配与java中的switch case很类似 但是不同的是java中switch case只能匹配值 而scala模式匹配更强大 还可以对类型
  • execjs._exceptions.ProcessExitedWithNonZeroStatus

    报错如下图 提示我292的换行符有问题 刚开始我以为是我服务器的nodejs环境没有配好 就忽略了换行错误 后面发现nodejs已经配置好了 才转过来正视这个问题 在gitlab的textview里发现了端倪 在pycharm里面根本发现不
  • 三路红外arduino循迹小车(两驱-----黑线循迹)

    原理 红外传感器检测到黑线 红外光被吸收 其对于的led将不亮 反之无黑线 红外光被反射接收 点亮led 源代码是我借鉴他人加以修改的 代码也很简单 缺点就是跑不快 一旦快了容易冲出巡线轨迹 define STOP 0 define FOR
  • SpringBoot+Netty+WebSocket 实现消息推送

    关于Netty Netty 是一个利用 Java 的高级网络的能力 隐藏其背后的复杂性而提供一个易于使用的 API 的客户端 服务器框架 Maven依赖
  • Zotero使用分享(一)——导入文献、管理文献、引用文献

    Zotero使用分享 一 导入文献 管理文献 引用文献 0 为什么要用文献管理工具 1 Zotero是什么 2 安装 3 添加资源到Zotero 3 1 通过文献DOI导入 3 2 从剪贴板中导入 3 3 利用EndNote导入 3 4 用
  • BindingException: Invalid bound statement (not found)

    org apache ibatis binding BindingException Invalid bound statement not found com UserInfoMapper listByRole 报错描述 程序一直可以正常
  • NTSC、PAL、SECAM三大制式简介

    NTSC PAL SECAM三大制式简介 NTSC PAL和SECAM是全球三大主要的电视广播制式 这三种制式是不能互相兼容的 例如在PAL制式的电视上播放NTSC的视频 则影像画面将不能正常显示 下面分别对这三种制式进行简要介绍 NTSC
  • Deeplabcut----(1)新建自己的训练(单只动物)

    Deeplabcut新建自己的训练 本教程最后使用Autodl云平台跑代码 本地电脑上只是进行数据标注 建议直接新建多动物训练 比单动物的项目能干的事多 也能对单动物进行预测 个人使用感觉还是mmpose预测新视频和图片的正确率更高 整个文
  • 阿里云服务器安装及部署canal

    阿里云服务器安装及部署canal 1 环境部署 1 1 mysql开启binlog模式 1 查看当前mysql是否开启binlog模式 SHOW VARIABLES LIKE log bin 如果log bin的值为OFF是未开启 为ON是
  • 多线程学习十九:生产者消费者

    异步模式之生产者 消费者 定义 与前面的保护性暂停中的 GuardObject 不同 不需要产生结果和消费结果的线程一一对应 消费队列可以用来平衡生产和消费的线程资源 生产者仅负责产生结果数据 不关心数据该如何处理 而消费者专心处理结果数据
  • Pandoc 实用教程

    Pandoc 是一种将各类文件互相转换的工具 例如 docx html markdown epub pdf 等 在一些 markdown 写作工具中 它常被用作导出工具的一种 Pandoc 的安装 安装方法有很多种 方案一 直接通过 Pan
  • CentOS6系统中在/etc/rc.local添加开机自启动项启动失败

    CentOS6系统中在 etc rc local添加开机自启动项启动失败 应项目要求需要在开机的时候启动自己的Redis程序 想当然的直接就往 etc rc local当中添加启动命令 结果重启之后发现什么都没有发生 一开始还以为是配置的问
  • SQL增删改查语句学习

    删除语句 语法 DELETE FROM 表名 WHERE 条件 例如 DELETE FROM studentchose WHERE sc id 202046 DELETE FROM studentchose WHERE sc id 2020
  • 基于springboot的校园疫情防控系统【毕业设计,源码,论文】

    想要源码或其他毕设项目 可以私信 摘 要 随着信息技术和网络技术的飞速发展 人类已进入全新信息化时代 传统管理技术已无法高效 便捷地管理信息 为了迎合时代需求 优化管理效率 各种各样的管理系统应运而生 各行各业相继进入信息管理时代 校园疫情
  • Linux下远程git服务器拉取代码发布jar包脚本

    一 yum安装 在Linux上是有yum安装Git 非常简单 只需要一行命令 yum y install git 二 maven安装 参考https www jianshu com p 51e4e84e02cd 三 编写脚本 脚本步骤如下
  • Echarts 地图使用,以及tooltip轮播使用

    一 首先下载Echarts npm install echarts save 二 引入Echarts 全局引入main js中 echarts 4 0 import echarts from echarts Vue prototype ec