1. 程式人生 > 其它 >問題總結21-07-12至21-08-15

問題總結21-07-12至21-08-15

⭐Canvas繪製粒子連線特效

  1 var canvas = document.getElementById("cas");
  2     var ctx = canvas.getContext("2d");
  3  
  4     resize();
  5     window.onresize = resize;
  6     //定義畫布大小的函式
  7     function resize() {
  8         canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
9 canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 10 } 11 //定時設定 瀏覽器下次重繪之前繼續更新下一幀動畫 12 var RAF = (function() { 13 return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function
(callback) { 14 window.setTimeout(callback, 1000 / 60); 15 }; 16 })(); 17 18 // 滑鼠活動時,獲取滑鼠座標 19 var warea = {x: null, y: null, max: 20000}; 20 window.onmousemove = function(e) { 21 e = e || window.event; 22 23 warea.x = e.clientX; 24 warea.y = e.clientY;
25 }; 26 window.onmouseout = function(e) { 27 warea.x = null; 28 warea.y = null; 29 }; 30 31 // 新增粒子 32 // x,y為粒子座標,xa, ya為粒子xy軸加速度,max為連線的最大距離 33 var dots = []; 34 for (var i = 0; i < 300; i++) { 35 var x = Math.random() * canvas.width; 36 var y = Math.random() * canvas.height; 37 var xa = Math.random() * 2 - 1; 38 var ya = Math.random() * 2 - 1; 39 40 dots.push({ 41 x: x, 42 y: y, 43 xa: xa, 44 ya: ya, 45 max: 6000 46 }) 47 } 48 49 // 延遲100秒開始執行動畫,如果立即執行有時位置計算會出錯 50 setTimeout(function() { 51 animate(); 52 }, 100); 53 54 // 每一幀迴圈的邏輯 55 function animate() { 56 ctx.clearRect(0, 0, canvas.width, canvas.height); 57 58 // 將滑鼠座標新增進去,產生一個用於比對距離的點陣列 59 var ndots = [warea].concat(dots); 60 61 dots.forEach(function(dot) { 62 63 // 粒子位移 64 dot.x += dot.xa; 65 dot.y += dot.ya; 66 67 // 遇到邊界將加速度反向 68 dot.xa *= (dot.x > canvas.width || dot.x < 0) ? -1 : 1; 69 dot.ya *= (dot.y > canvas.height || dot.y < 0) ? -1 : 1; 70 71 // 繪製點 72 ctx.fillRect(dot.x - 0.5, dot.y - 0.5, 1, 1); 73 74 // 迴圈比對粒子間的距離 75 for (var i = 0; i < ndots.length; i++) { 76 var d2 = ndots[i]; 77 78 if (dot === d2 || d2.x === null || d2.y === null) continue; 79 80 var xc = dot.x - d2.x; 81 var yc = dot.y - d2.y; 82 83 // 兩個粒子之間的距離 84 var dis = xc * xc + yc * yc; 85 86 // 距離比 87 var ratio; 88 89 // 如果兩個粒子之間的距離小於粒子物件的max值,則在兩個粒子間畫線 90 if (dis < d2.max) { 91 92 // 如果是滑鼠,則讓粒子向滑鼠的位置移動 93 if (d2 === warea && dis > (d2.max / 2)) { 94 dot.x -= xc * 0.03; 95 dot.y -= yc * 0.03; 96 } 97 98 // 計算距離比 99 ratio = (d2.max - dis) / d2.max; 100 101 // 畫線 102 ctx.beginPath(); 103 ctx.lineWidth = ratio / 2; 104 //線條顏色 105 ctx.strokeStyle = 'rgba(0,0,0,' + (ratio + 0.2) + ')'; 106 ctx.moveTo(dot.x, dot.y); 107 ctx.lineTo(d2.x, d2.y); 108 ctx.stroke(); 109 } 110 } 111 112 // 將已經計算過的粒子從陣列中刪除 113 ndots.splice(ndots.indexOf(dot), 1); 114 }); 115 116 RAF(animate); 117 }

頁面使用

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
 6   <title></title>
 7 </head>
 8 <body>
 9   <!-- 頁面背景 -->
10   <canvas id="cas"></canvas>
11 </body>
12 <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"></script>
13 <script  src="./js/canvas.js"></script>
14 </html>

⭐靜態html檔案在手機上訪問

1. 安裝node

2. 全域性裝anywhere的npm包(npm i -g anywhere)

3. 到任意目錄下用命令列執行anywhere(-p 引數可以設定啟動埠)

⭐清空input輸入框歷史記錄

1 <input type="email" name="email" autocomplete="off" />

⭐js千分位加逗號

1.parseFloat(num).toLocaleString()

2.

 1 <script>
 2         'use strict'
 3         let format = n => {
 4             let num = n.toString()
 5             let decimals = ''
 6                 // 判斷是否有小數
 7             num.indexOf('.') > -1 ? decimals = num.split('.')[1] : decimals
 8             let len = num.length
 9             if (len <= 3) {
10                 return num
11             } else {
12                 let temp = ''
13                 let remainder = len % 3
14                 decimals ? temp = '.' + decimals : temp
15                 if (remainder > 0) { // 不是3的整數倍
16                     return num.slice(0, remainder) + ',' + num.slice(remainder, len).match(/\d{3}/g).join(',') + temp
17                 } else { // 是3的整數倍
18                     return num.slice(0, len).match(/\d{3}/g).join(',') + temp
19                 }
20             }
21         }
22         format(12323.33)  // '12,323.33'
23     </script>

⭐react+ts配置@根路徑

1.

2.

3. 如果要同時通過src引用:

1 “paths”: [
2 "src/*": ["./src/*"],
3 "@/*": ["./src/*"]
4 ]

⭐ts中setInterval型別為NodeJS.Timeout

⭐import XLSX from 'xlsx-style'報錯

This relative module was not found: ./cptable in ./node_modules/[email protected]@xlsx-style/dist/cpexcel.js

在\node_modules\xlsx-style\dist\cpexcel.js 807行的

var cpt = require('./cpt' + 'able');改成var cpt = cptable;

⭐git

1 git branch -a //檢視本地分支
2 git checkout -b 本地分支 origin/遠端分支
3 git merge 要合併的分支名字 
4 git branch -d 要刪除的分支名字
5 git branch -D 要刪除的分支名字 //強制刪除
6 git remote show origin //檢視遠端分支和本地分支對應
7 git remote prune origin //刪除遠端已經不存在的本地分支
8 git fetch //把遠端分支上所有的更新都拉取下來

⭐修改echarts儀表盤的背景顏色

⭐echarts折線圖從x軸原點開始

 1 option = {
 2     xAxis: {
 3         type: 'category',
 4         data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
 5         boundaryGap: false // 不留白,從原點開始
 6     },
 7     yAxis: {
 8         type: 'value'
 9     },
10     series: [{
11         data: [820, 932, 901, 934, 1290, 1330, 1320],
12         type: 'line'
13     }]
14 };

⭐echarts折線圖顯示最大值的點數值

markPoint: type: 'max'

⭐js table裡面新增元素

1 td = document.createElement("td");   
2 td.innerHTML = "<input type='text'/>";
3 tr.appendChild(td);

⭐sourceTree拉取程式碼報錯

remote: HTTP Basic: Access denied

⭐JSDOC註釋規範化

https://blog.csdn.net/KNIGH_YUN/article/details/104845603

⭐偽元素沒有建立新的元素

偽類

⭐JSX.Element和React.ReactNode區別

https://blog.csdn.net/sinat_36146776/article/details/105734353

⭐require().default

https://www.cnblogs.com/cangqinglang/p/10445256.html

⭐js返回頂部

document.documentElement.scrollTop = 0

⭐react區分不同的生產環境

1 if (process.env.NODE_ENV === 'production') {
2             return `https://****.*****.com/#/dashboard/${row.dashboardId}/show`
3         } else if (process.env.NODE_ENV === 'stage') {
4             return `https://*****.st.***.com/#/dashboard/${row.dashboardId}/show`
5         } else {
6             return `http://*****.test.****.com/#/dashboard/${row.dashboardId}/show`
7         }

⭐Uncaught SyntaxError: Unexpected token '<'

https://blog.csdn.net/weixin_43742708/article/details/110594790