• index.vue
  1. <template>
  2. <view>
  3. <view class="qiun-columns">
  4. <uCharts id="ucharts"
  5. :val="opts.val"
  6. :min="opts.min"
  7. :max="opts.max"
  8. :step="opts.step"
  9. :width="opts.width"
  10. :height="opts.height"
  11. :border="opts.border"
  12. :title="opts.title"
  13. :showUnit="opts.showUnit"
  14. :unit="opts.unit"
  15. :showDecimal="opts.showDecimal"
  16. :colorSatrt="opts.colorSatrt"
  17. :colorEnd="opts.colorEnd"
  18. :colorButton="opts.colorButton"
  19. :pageBg="opts.pageBg"
  20. :circleBg="opts.circleBg"
  21. :pointBg="opts.pointBg"
  22. :setUpUrl="opts.setUpUrl"
  23. @change="change"
  24. ref="ucharts" />
  25. </view>
  26. <button class="qiun-button" @tap="changeData()">更新图表</button>
  27. <!-- 下面是简单调用的例子,除了id和val其他的都可以不给 -->
  28. <view class="qiun-columns">
  29. <uCharts id="ucharts2" :val="simple" title="PM2.5" colorSatrt="#5ACECE" :showUnit="showUnit" colorEnd="#8CCE42"/>
  30. </view>
  31. </view>
  32. </template>
  33. <script>
  34. import uCharts from '@/components/u-charts/bar.vue';
  35. var _self;
  36. export default {
  37. data() {
  38. return {
  39. simple:18,
  40. showUnit:false,
  41. opts:{
  42. val:15.8,
  43. min:10,
  44. max:40,
  45. step:1,
  46. width:220,
  47. height:220,
  48. border:35,
  49. title:'室内温度',//传null为不显示最上面标题
  50. showUnit:true,//是否显示单位
  51. unit:'℃',
  52. showDecimal:true,//是否小数
  53. colorSatrt:'#FFC2B3',
  54. colorEnd:'#FF3B1D',
  55. colorButton:'#565656',//底部按钮颜色
  56. pageBg:'#F4F5F6',//组件页面背景色,如果父组件像本示例设置了padding,你懂的哈
  57. circleBg:'#FFFFFF',//中间圆心文字块的背景色
  58. pointBg:'#FFFFFF'//控制点背景色
  59. // setUpUrl:'../../page/testurl'//设置那个按钮跳转的地方
  60. }
  61. };
  62. },
  63. components: {
  64. uCharts
  65. },
  66. onLoad() {
  67. _self = this;
  68. this.getServerData();
  69. },
  70. methods: {
  71. change(val){
  72. console.log(val)
  73. },
  74. getServerData() {
  75. },
  76. changeData() {
  77. //作为调用组件内方法的示例,您自由想象发挥哈
  78. this.$refs.ucharts.changeData(28.35);
  79. }
  80. }
  81. };
  82. </script>
  83. <style>
  84. .qiun-columns {
  85. display: flex;
  86. flex-direction: column !important;
  87. padding: 40upx;
  88. }
  89. </style>
  • bar.vue

  1. <template>
  2. <view class="progress_box" :style="{'background-color': pageBg}">
  3. <canvas :canvas-id="id" :style="{'width':width+'px','height':height+'px'}" disable-scroll=true @touchstart="touchStart" @touchmove="touchMove" @touchend="touchEnd"></canvas>
  4. <view class="progress_txt" :style="{'width':centerRadius+'px','height':centerRadius+'px','background-color': circleBg}">
  5. <view class="progress_info_top" v-if="title">{{title}}</view>
  6. <view class="progress_info_center">
  7. <view class="progress_info_center_a">
  8. {{ integer }}
  9. </view>
  10. <view class="progress_info_center_c">
  11. <view class="progress_info_center_c1"><text class="c1_text" v-if="showUnit">{{unit}}</text></view>
  12. <view class="progress_info_center_c2"><text class="c1_text" v-if="showDecimal">.{{ decimal }}</text></view>
  13. </view>
  14. </view>
  15. <view class="progress_info_bottom" @tap="goSetUp">设置</view>
  16. </view>
  17. </view>
  18. </template>
  19. <script>
  20. function isInAngleRange(angle, startAngle, endAngle) {
  21. function adjust(angle) {
  22. while (angle < 0) {
  23. angle += 2 * Math.PI;
  24. }
  25. while (angle > 2 * Math.PI) {
  26. angle -= 2 * Math.PI;
  27. }
  28. return angle;
  29. }
  30. angle = adjust(angle);
  31. startAngle = adjust(startAngle);
  32. endAngle = adjust(endAngle);
  33. if (startAngle > endAngle) {
  34. endAngle += 2 * Math.PI;
  35. if (angle < startAngle) {
  36. angle += 2 * Math.PI;
  37. }
  38. }
  39. return angle >= startAngle && angle <= endAngle;
  40. }
  41. function isInArea(e, r) {
  42. return Math.pow(e.x - r.x, 2) + Math.pow(e.y - r.y, 2) <= Math.pow(r.r, 2);
  43. }
  44. function isInUp(e,r) {
  45. if(isInArea(e,r)){
  46. let angle = Math.atan2(r.y - e.y, e.x - r.x);
  47. angle = -angle;
  48. if (isInAngleRange(angle, 0.5*Math.PI, 0.75*Math.PI)) {
  49. return true;
  50. }else{
  51. return false;
  52. }
  53. }else{
  54. return false;
  55. }
  56. }
  57. function isInDown(e,r) {
  58. if(isInArea(e,r)){
  59. let angle = Math.atan2(r.y - e.y, e.x - r.x);
  60. angle = -angle;
  61. if (isInAngleRange(angle, 0.25*Math.PI, 0.5*Math.PI)) {
  62. return true;
  63. }else{
  64. return false;
  65. }
  66. }else{
  67. return false;
  68. }
  69. }
  70. function isInCtrl(e,r) {
  71. if(isInArea(e,r)){
  72. return true;
  73. }else{
  74. return false;
  75. }
  76. }
  77. export default {
  78. props:{
  79. id:{
  80. default:'ucharts'
  81. },
  82. val:{
  83. default:0
  84. },
  85. min:{
  86. default:-10
  87. },
  88. max:{
  89. default:30
  90. },
  91. step:{
  92. default:1
  93. },
  94. width:{
  95. default:220
  96. },
  97. height:{
  98. default:220
  99. },
  100. border:{
  101. default:35
  102. },
  103. title:{
  104. default:null
  105. },
  106. unit:{
  107. default:'℃'
  108. },
  109. showUnit:{
  110. default:'true'
  111. },
  112. showDecimal:{
  113. default:'true'
  114. },
  115. colorSatrt:{
  116. default:'#FFC2B3'
  117. },
  118. colorEnd:{
  119. default:'#FF3B1D'
  120. },
  121. colorButton:{
  122. default:'#565656'
  123. },
  124. pageBg:{
  125. default:'#F4F5F6'
  126. },
  127. circleBg:{
  128. default:'#FFFFFF'
  129. },
  130. pointBg:{
  131. default:'#FFFFFF'
  132. },
  133. setUpUrl:{
  134. default:'../../page/initUrl'
  135. }
  136. },
  137. data() {
  138. return {
  139. valData:0,
  140. valPoint:{},
  141. centerPoint:{},
  142. insideRadius:{},
  143. startPoint:{},
  144. endPoint:{},
  145. isMove:false
  146. }
  147. },
  148. computed: {
  149. integer:function() {
  150. if(this.valData<this.min){ return this.min };
  151. if(this.valData>this.max){ return this.max };
  152. return parseInt(this.valData);
  153. },
  154. decimal:function() {
  155. if(this.valData<this.min){ return 0 };
  156. if(this.valData>this.max){ return 0 };
  157. return Math.abs(parseInt(this.valData*10)-parseInt(this.valData)*10);
  158. },
  159. centerRadius:function() {
  160. return Math.min(this.width/2-this.border,this.height/2-this.border)*2 * 0.9;
  161. }
  162. },
  163. mounted: function() {
  164. this.valData=this.val;
  165. this.drawCircle(this.val,this.min,this.max,this.width,this.height,this.border,this.colorSatrt,this.colorEnd,this.colorButton,this.pointBg);
  166. },
  167. methods: {
  168. drawCircle:function(val,min,max,width,height,border,colorSatrt,colorEnd,colorButton,pointBg) {
  169. let radius=Math.min(width/2-border/2,height/2-border/2);
  170. let centerPoint={
  171. x:width/2,
  172. y:height/2,
  173. r:radius+border/2
  174. };
  175. this.centerPoint=centerPoint;
  176. this.insideRadius={
  177. x:width/2,
  178. y:height/2,
  179. r:radius-border/2
  180. }
  181. let ctx = uni.createCanvasContext(this.id, this);
  182. ctx.setLineWidth(border);
  183. ctx.setStrokeStyle(colorButton);
  184. ctx.setLineCap('butt');
  185. //画按钮背景
  186. ctx.beginPath();
  187. ctx.arc(centerPoint.x, centerPoint.y, radius , 0.25 * Math.PI, 0.75 * Math.PI, false);
  188. ctx.stroke();
  189. //画按钮
  190. ctx.setLineWidth(1);
  191. ctx.setStrokeStyle("#FFFFFF");
  192. ctx.beginPath();
  193. ctx.moveTo(centerPoint.x, height);
  194. ctx.lineTo(centerPoint.x, height-border);
  195. ctx.stroke();
  196. ctx.setLineWidth(3);
  197. ctx.beginPath();
  198. let upPoint={
  199. x:centerPoint.x+(radius)*Math.cos(0.625* Math.PI),
  200. y:centerPoint.x+(radius)*Math.sin(0.625* Math.PI)
  201. };
  202. let downPoint={
  203. x:centerPoint.x+(radius)*Math.cos(0.375* Math.PI),
  204. y:centerPoint.x+(radius)*Math.sin(0.375* Math.PI)
  205. };
  206. let xLength=border*0.6/2;
  207. ctx.moveTo(upPoint.x-xLength, upPoint.y);
  208. ctx.lineTo(upPoint.x+xLength, upPoint.y);
  209. ctx.moveTo(upPoint.x, upPoint.y-xLength);
  210. ctx.lineTo(upPoint.x, upPoint.y+xLength);
  211. ctx.moveTo(downPoint.x-xLength, downPoint.y);
  212. ctx.lineTo(downPoint.x+xLength, downPoint.y);
  213. ctx.stroke();
  214. //变色背景条
  215. ctx.setLineWidth(border);
  216. let gradient = ctx.createLinearGradient(centerPoint.x-radius-border, centerPoint.y, centerPoint.x+radius+border, centerPoint.y);
  217. gradient.addColorStop('0', colorSatrt);
  218. gradient.addColorStop('1.0', colorEnd);
  219. ctx.setStrokeStyle(gradient);
  220. ctx.beginPath();
  221. ctx.arc(centerPoint.x, centerPoint.y, radius , 0.75 * Math.PI, 0.25 * Math.PI, false);
  222. ctx.stroke();
  223. //画控制点
  224. ctx.beginPath();
  225. ctx.setFillStyle(pointBg);
  226. //控制点阴影效果,不需要可以删掉
  227. ctx.setShadow(2, 2, 2, '#888888')
  228. if(val<min) val=min;
  229. if(val>max) val=max;
  230. let progress = (val- min) / (max - min) ;
  231. //控制点半径
  232. let valRadius=border * 0.45;
  233. //控制点弧度
  234. let valRadian= valRadius / (Math.PI * radius);
  235. progress = (1.5-2*valRadian) * progress + 0.75+valRadian;
  236. if (progress >= 2) {
  237. progress = progress % 2;
  238. }
  239. let valPoint={
  240. x:centerPoint.x+(radius)*Math.cos(progress* Math.PI),
  241. y:centerPoint.x+(radius)*Math.sin(progress* Math.PI),
  242. r:valRadius,
  243. v:val,
  244. s:0.75+valRadian,
  245. e:2.25-valRadian,
  246. t:1.5-2*valRadian,
  247. n:progress,
  248. };
  249. this.valPoint=valPoint;
  250. ctx.arc(valPoint.x, valPoint.y, valPoint.r, 0, 2 * Math.PI, false);
  251. ctx.closePath();
  252. ctx.fill();
  253. ctx.draw();
  254. },
  255. touchStart:function(e) {
  256. let touches = e.mp.changedTouches[0] || e.changedTouches[0];
  257. if(isInCtrl(touches,this.valPoint)){
  258. this.isMove=true;
  259. touches.val=this.valPoint;
  260. this.startPoint=touches;
  261. }
  262. },
  263. touchMove:function(e) {
  264. let touches = e.mp.changedTouches[0] || e.changedTouches[0];
  265. if(this.isMove === true){
  266. //这两句是判断是否在进度条内,加上体验不好,你可以试一下&& isInArea(touches,this.insideRadius) === false && isInArea(touches,this.centerPoint) === true
  267. let angle = Math.atan2(this.centerPoint.y - touches.y, touches.x - this.centerPoint.x);
  268. angle = -angle;
  269. let newRadian = angle/Math.PI;
  270. if(newRadian<0){
  271. newRadian = 2 + newRadian;
  272. }
  273. if(newRadian < this.startPoint.val.e - 1.7){
  274. newRadian += 2;
  275. }
  276. let progress = (newRadian - this.startPoint.val.s)/this.startPoint.val.t;
  277. progress = (this.max - this.min)*progress;
  278. let nweVal = this.min + progress;
  279. if(nweVal>this.max) nweVal = this.max;
  280. if(nweVal<this.min) nweVal = this.min;
  281. nweVal=(parseInt(nweVal*10)*0.1).toFixed(1);
  282. this.valData = nweVal;
  283. this.drawCircle(nweVal,this.min,this.max,this.width,this.height,this.border,this.colorSatrt,this.colorEnd,this.colorButton,this.pointBg);
  284. }
  285. },
  286. touchEnd:function(e) {
  287. let touches = e.mp.changedTouches[0] || e.changedTouches[0];
  288. if(isInUp(touches,this.centerPoint) === true && this.isMove === false){
  289. this.valData+=this.step;
  290. if(this.valData>this.max) this.valData = this.max;
  291. this.drawCircle(this.valData,this.min,this.max,this.width,this.height,this.border,this.colorSatrt,this.colorEnd,this.colorButton,this.pointBg);
  292. }
  293. if(isInDown(touches,this.centerPoint) === true && this.isMove === false){
  294. this.valData-=this.step;
  295. if(this.valData<this.min) this.valData = this.min;
  296. this.drawCircle(this.valData,this.min,this.max,this.width,this.height,this.border,this.colorSatrt,this.colorEnd,this.colorButton,this.pointBg);
  297. }
  298. if(this.isMove){
  299. this.$emit('change',this.valData)
  300. // let _this=this;
  301. // uni.request({
  302. // url: 'https://www.ucharts.cn/data.json',
  303. // data:{
  304. // val:this.valData
  305. // },
  306. // success: function(res) {
  307. // console.log("发送新数据["+_this.valData+"]成功!")
  308. // },
  309. // fail: () => {
  310. // _self.tips="网络错误,小程序端请检查合法域名";
  311. // },
  312. // });
  313. // this.isMove = false;
  314. }
  315. },
  316. goSetUp:function() {
  317. console.log(this.setUpUrl);
  318. uni.showToast({
  319. title: '跳转界面',
  320. duration: 2000
  321. });
  322. },
  323. changeData:function(val) {
  324. this.valData=val;
  325. this.drawCircle(val,this.min,this.max,this.width,this.height,this.border,this.colorSatrt,this.colorEnd,this.colorButton,this.pointBg);
  326. },
  327. }
  328. };
  329. </script>
  330. <style>
  331. .progress_box {
  332. position: relative;
  333. width: 100%;
  334. height: 100%;
  335. display: flex;
  336. align-items: center;
  337. justify-content: center;
  338. text-align: center;
  339. }
  340. .progress_txt {
  341. position: absolute;
  342. font-size: 28upx;
  343. border-radius: 50%;
  344. flex-direction: column !important;
  345. display: flex;
  346. align-items: center;
  347. justify-content: center;
  348. text-align: center;
  349. box-shadow:0 0 6upx 4upx #DEDEDE;
  350. }
  351. .progress_info_top {
  352. font-size: 32upx;
  353. letter-spacing: 2upx;
  354. color: #000000;
  355. }
  356. .progress_info_center {
  357. display: flex;
  358. flex-direction: row !important;
  359. color: #000000;
  360. }
  361. .progress_info_center_a {
  362. font-size: 80upx;
  363. height: 100upx;
  364. line-height: 100upx;
  365. font-weight: bold;
  366. letter-spacing: 2upx;
  367. }
  368. .progress_info_center_c {
  369. position: relative;
  370. height: 100upx;
  371. display: flex;
  372. flex-direction: column !important;
  373. align-items: center;
  374. justify-content: center;
  375. }
  376. .progress_info_center_c1 {
  377. display: flex;
  378. height: 50upx;
  379. align-items: center ;
  380. }
  381. .c1_text{
  382. height: 28upx;
  383. font-size: 28upx;
  384. letter-spacing: 2upx;
  385. }
  386. .progress_info_center_c2 {
  387. display: flex;
  388. height: 50upx;
  389. align-items:flex-start;
  390. }
  391. .c2_text{
  392. height: 50upx;
  393. font-size: 28upx;
  394. letter-spacing: 2upx;
  395. }
  396. .progress_info_bottom {
  397. font-size: 32upx;
  398. letter-spacing: 2upx;
  399. color: #666666;
  400. }
  401. </style>
  • qiun.css

  1. page {
  2. background: #F4F5F6;
  3. width: 750upx;
  4. overflow-x: hidden;
  5. }
  6. .qiun-padding {
  7. padding: 2%;
  8. width: 96%;
  9. }
  10. .qiun-wrap {
  11. display: flex;
  12. flex-wrap: wrap;
  13. }
  14. .qiun-rows {
  15. display: flex;
  16. flex-direction: row !important;
  17. }
  18. .qiun-columns {
  19. display: flex;
  20. flex-direction: column !important;
  21. }
  22. .qiun-common-mt {
  23. margin-top: 10upx;
  24. }
  25. .qiun-common-border-bottom {
  26. border-bottom: 1px solid #E9E9E9;
  27. }
  28. .qiun-bg-white {
  29. background: #FFFFFF;
  30. }
  31. .qiun-title-bar {
  32. width: 96%;
  33. padding: 10upx 2%;
  34. flex-wrap: nowrap;
  35. }
  36. .qiun-title-dot-light {
  37. border-left: 10upx solid #0ea391;
  38. padding-left: 10upx;
  39. font-size: 32upx;
  40. color: #000000
  41. }
  42. .qiun-textarea {
  43. height: 400upx;
  44. font-size: 34upx;
  45. box-sizing: border-box;
  46. line-height: 50upx;
  47. width: 100%;
  48. background-color: #FFFFFF;
  49. }
  50. .qiun-text-tips {
  51. font-size: 28upx;
  52. color: #dc2626;
  53. line-height: 40upx;
  54. padding: 6upx;
  55. }
  56. .qiun-button {
  57. background: #2fc25b;
  58. color: #FFFFFF;
  59. margin: 20upx;
  60. }
  61. /* 通用样式 */
  62. .qiun-charts {
  63. width: 750upx;
  64. height: 500upx;
  65. background-color: #FFFFFF;
  66. }
  67. .charts {
  68. width: 750upx;
  69. height: 500upx;
  70. background-color: #FFFFFF;
  71. }
  72. /* 横屏样式 */
  73. .qiun-charts-rotate {
  74. width: 700upx;
  75. height: 1100upx;
  76. background-color: #FFFFFF;
  77. padding: 25upx;
  78. }
  79. .charts-rotate {
  80. width: 700upx;
  81. height: 1100upx;
  82. background-color: #FFFFFF;
  83. }
  84. /* 圆弧进度样式 */
  85. .qiun-charts3 {
  86. width: 750upx;
  87. height: 250upx;
  88. background-color: #FFFFFF;
  89. position: relative;
  90. }
  91. .charts3 {
  92. position: absolute;
  93. width: 250upx;
  94. height: 250upx;
  95. background-color: #FFFFFF;
  96. }

【uniapp 开发】智能温控开关 (环状图)的更多相关文章

  1. Android开发—智能家居系列】(二):用手机对WIFI模块进行配置

    在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的.有图为证,哈哈. 上一篇文章[Android开发—智能家居系列](一):智能家居原理的文末总结中写到: 手机APP控制智能温控器 ...

  2. 使用uni-app开发微信小程序

    uni-app 开发微信小程序 前言 9月份,开始开发微信小程序,也曾调研过wepy/mpvue,考虑到后期跨端的需求,最终选择使用了uni-app,本文主要介绍如何使用uni-app搭建小程序项目, ...

  3. CozyRSS开发记录1-原型图与Grid

    CozyRSS开发记录1-原型图与Grid 1.使用MockPlus画出最简陋的原型图 这个界面参考了目前我最常使用的RSS阅读-傲游浏览器的内置RSS阅读器.主体框架划分为上.左下.右下三块,分别是 ...

  4. 基于Laravel+Swoole开发智能家居后端

    基于Laravel+Swoole开发智能家居后端 在上一篇<Laravel如何优雅的使用Swoole>中我已经大概谈到了Laravel结合Swoole的用法. 今天,我参与的智能家居项目基 ...

  5. jqPlot图表插件学习之饼状图和环状图

    一.准备工作 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载对应的js和css(因为笔者在VS2 ...

  6. 用C#开发的双色球走势图(二)

    昨晚由于时间的原因只写了一部分内容,今天将这一部分内容补充完毕,多谢各位园友的支持. 这是用C#开发的双色球走势图(一)新的园友可以看昨晚写的内容,以免脱节.首先回复园友的评论,有说好的有说不好的,本 ...

  7. [Aaronyang] 写给自己的WPF4.5 笔记15[AyArc诞生-WPF版本绚丽的环状图,Ay制作,AyWindow强势预览]

    原文:[Aaronyang] 写给自己的WPF4.5 笔记15[AyArc诞生-WPF版本绚丽的环状图,Ay制作,AyWindow强势预览]  我的文章一定要做到对读者负责,否则就是失败的文章  -- ...

  8. SNF快速开发平台WinForm-CS甘特图

    我们在做项目当中会经常用到按时间进度查看任务,其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况. 甘特图包含以下三个含义: 1.以图形或表格的形式显示活动: 2.通用 ...

  9. APP开发项目思维导图

    APP开发项目思维导图 下载思维导图:APP开发项目.xmind.zip --------------------------------------- APP开发项目 app项目标记: 未启动 功能 ...

  10. 用C#开发的双色球走势图(原创)值得园友拥有(二)接上一篇

    昨晚由于时间的原因只写了一部分内容,今天将这一部分内容补充完毕,多谢各位园友的支持. 这是用C#开发的双色球走势图(原创)值得园友拥有 新的园友可以看昨晚写的内容,以免脱节.首先回复园友的评论,有说好 ...

随机推荐

  1. 矩池云 | 新冠肺炎防控:肺炎CT检测

    连日来,新型冠状病毒感染的肺炎疫情,牵动的不仅仅是全武汉.全湖北,更是全国人民的心,大家纷纷以自己独特的方式为武汉加油!我们相信坚持下去,终会春暖花开. 今天让我们以简单实用的神经网络模型,来检测肺炎 ...

  2. 教你如何解决JS/TS里特定String进行拆分然后遍历各个元素

    摘要:我们需要先判断特定String里是否包含我们需要的元素,针对这个元素对这个字符串进行拆分,遍历各个元素. 本文分享自华为云社区<JavaScript/TypeScript项目里如何对特定S ...

  3. LGP3813题解

    这道题是我去年11月份的时候看到的,当时写了一个假的做法没过样例,然后就没管了. 结果今天在模拟赛的时候放到了 T1( 我也不知道他为什么是对的,可是他就是过了样例和大样例.jpg 容易发现 \(n\ ...

  4. 从原理学习Java反序列化

    1 序列化与反序列化 1.1 概念 序列化: 将数据结构或对象转换成二进制串的过程 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程 1.2 使用场景 当你想把的内存中的对象状态 ...

  5. 使用WebService的优点

    1.支持跨平台,跨语言,远程调用 WSDL:web service definition language 直译 webservice定义语言 对应一种类型的文件.wsdl2.定义了web servi ...

  6. ActiveMQ-模块代码-02

    模块模式 p2p模式 生产者 ConfigBeanQueue package com.producerp2p.producerp2p; import org.apache.activemq.comma ...

  7. Eclipse阿里云镜像源配置

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 一.什么是Eclipse Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过 ...

  8. linux下查看文件编码及修改编码介绍

    1.在Vim中可以直接查看文件编码:set fileencoding即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在~/.vimrc 文件中添 ...

  9. python中文及符号检测工具带GUI界面

    import tkinter import webbrowser import re #本程序是一个中文字符和中文检测工具 #中文字符自己添加,我只添加了一点 #输入字符串,点击检查文本即可判断有没有 ...

  10. 西门子S210电机位置控制过调问题解决方法

    问题描述 创建完工艺对象,使用MC_MoveAbsolute工艺指令进行绝对定位,发现在下达指令后,电机会出现先超过目标位置再回调的现象,即过冲. 电机连接的机械结构为旋转轴,而不是线性轴. 解决方法 ...