//3s清除十字線
setInterval(() => {
ctx2.clearRect(0, 0, canvas.width, canvas.height);
}, 3000);
var drawCoordinate = function (result) {
//移動時畫十字座標
//觸摸滑動事件 //這裏要注意層級問題,滑動層要高一層
canvas2.addEventListener("touchmove", function (event) {
ctx2.save()
ctx2.clearRect(0, 0, canvas.width, canvas.height)
event.preventDefault();
//獲取觸摸座標
var fingerMove = event.touches[0];
var fMoveX = fingerMove.clientX
var fMoveY = fingerMove.clientY
if (fMoveX < 0) {
fMoveX = 0
} else if (fMoveX > canvasWidth / dpr) {
fMoveX = canvasWidth / dpr - 1
}
if (fMoveY < 0) {
fMoveY = reserveH / dpr
} else if (fMoveY > canvas.height / dpr) {
fMoveY = canvas.height / dpr - (reserveH / dpr)
}
var leftText;
if (dpr < 3) {
leftText = 12 * dpr + 'px'
} else if (dpr >= 3) {
leftText = 10 * dpr + 'px'
}
//格式化底部時間
var index;
var arrY = [];
var arrX = [];
for (var i = 0; i < 240; i++) {
arrX.push(window.innerWidth / 240 * i);
}
for (var i = 0; i < arrX.length; i++) {
arrY.push(Math.abs(fMoveX - arrX[i]));
}
var min2 = Math.min(...arrY);
index = arrY.findIndex((item) => {
return item == min2
})
if (index + 570 > 690) {
var timers = function () {
if ((index + 570 + 90) % 60 < 10) {
return parseInt((index + 570 + 90) / 60) + ":0" + (index + 570 + 90) % 60
}
return parseInt((index + 570 + 90) / 60) + ":" + (index + 570 + 90) % 60
}();
} else {
var timers = function () {
if ((index + 570) % 60 < 10) {
return parseInt((index + 570) / 60) + ":0" + (index + 570) % 60
}
return parseInt((index + 570) / 60) + ":" + (index + 570) % 60
}();
}
ctx2.beginPath();
ctx2.lineWidth = 2
ctx2.fillStyle = '#22364B' //字體顏色
ctx2.font = `${leftText} Arial`
// 畫Y軸時間
// 當觸摸點小於這個框的寬度一半時
if (fMoveX <= ctx2.measureText(timers).width / 4) {
console.log('當觸摸點小於這個框的寬度一半時')
//畫框
ctx2.fillRect(0, 0, ctx2.measureText(timers).width + 20 * dpr, reserveH * dpr)
ctx2.fillRect(0, canvas.height - reserveH * dpr, ctx2.measureText(timers).width + 20 * dpr, reserveH * dpr)
//畫線
ctx2.moveTo(fMoveX * dpr + 1 * dpr, reserveH * dpr);
ctx2.lineTo(fMoveX * dpr + 1 * dpr, canvas.height - reserveH * dpr);
ctx2.setLineDash([]);
ctx2.stroke();
//畫字
ctx2.fillStyle = '#fff' //字體顏色
ctx2.textBaseline = 'middle'
ctx2.fillText(timers, ctx2.measureText(timers).width / 2 + 6 * dpr, reserveH * dpr / 2);
ctx2.fillText(timers, ctx2.measureText(timers).width / 2 + 6 * dpr, canvas.height - reserveH * dpr / 2);
} else if (fMoveX >= window.innerWidth - ctx2.measureText(timers).width / 2 + 2 * dpr) {
console.log('當觸摸點大於這個框的寬度一半時')
ctx2.fillRect(canvasWidth - ctx2.measureText(timers).width * 2 + 15 * dpr, 0, ctx2.measureText(timers).width + 20 * dpr, reserveH * dpr);
ctx2.fillRect(canvasWidth - ctx2.measureText(timers).width * 2 + 15 * dpr, canvas.height - reserveH * dpr, ctx2.measureText(timers).width + 20 * dpr, reserveH * dpr);
ctx2.moveTo(fMoveX * dpr + 1 * dpr, reserveH * dpr);
ctx2.lineTo(fMoveX * dpr + 1 * dpr, canvas.height - reserveH * dpr);
ctx2.setLineDash([]);
ctx2.stroke();
ctx2.fillStyle = '#fff' //字體顏色
ctx2.textBaseline = 'middle'
ctx2.fillText(timers, canvasWidth - ctx2.measureText(timers).width / 2 - 5 * dpr, reserveH * dpr / 2);
ctx2.fillText(timers, canvasWidth - ctx2.measureText(timers).width / 2 - 5 * dpr, canvas.height - reserveH * dpr / 2);
} else {
console.log('當觸摸點在中間時')
ctx2.fillRect(fMoveX * dpr - ctx2.measureText(timers).width / 2 - 6 * dpr, 0, ctx2.measureText(timers).width + 20 * dpr, reserveH * dpr);
ctx2.fillRect(fMoveX * dpr - ctx2.measureText(timers).width / 2 - 6 * dpr, canvas.height - reserveH * dpr, ctx2.measureText(timers).width + 20 * dpr, reserveH * dpr);
ctx2.moveTo(fMoveX * dpr + 1 * dpr, reserveH * dpr);
ctx2.lineTo(fMoveX * dpr + 1 * dpr, canvas.height - reserveH * dpr);
ctx2.setLineDash([]);
ctx2.stroke();
ctx2.fillStyle = '#fff' //字體顏色
ctx2.fillText(timers, fMoveX * dpr + 6 * dpr, reserveH * dpr / 2);
ctx2.fillText(timers, fMoveX * dpr + 6 * dpr, canvas.height - reserveH * dpr / 2);
}
// 畫X軸價格與漲跌幅 計算公式
// 每一個時刻價格 = 收盤價 - ((觸摸高 - 收盤高) * 單像素比例)
var leftPrice = closeP - ((fMoveY * dpr - closeH) * singleScase).toFixed(2);
// var xProportion = (fMoveY - reserveH) / realH;
// var priceArr = maxP - xProportion * (maxP - minP)
ctx2.fillStyle = '#22364B';
//在最頂部觸碰時
if (fMoveY < reserveH / dpr) {
//畫X左上框
ctx2.beginPath()
ctx2.fillRect(-10 * dpr, 0, ctx2.measureText((leftPrice).toFixed(2)).width + 20 * dpr, reserveH * dpr);
//畫X右上框
ctx2.fillRect(window.innerWidth * dpr - ctx2.measureText((leftPrice).toFixed(2)).width - 20 * dpr, 0, ctx2.measureText((leftPrice).toFixed(2)).width + 20 * dpr, reserveH * dpr);
//畫左右上方文字樣式
ctx2.fillStyle = '#fff'
ctx2.font = `${leftText} Arial`
ctx2.textBaseline = 'middle'
ctx2.textAlign = "center";
//畫左右上方文字
ctx2.fillText(leftPrice != 'NAN' ? (leftPrice).toFixed(2) : "--", ctx2.measureText((leftPrice).toFixed(2)).width / 2 + 5 * dpr, reserveH);
ctx2.fillText(result[index] ? result[index].zzf : "--", window.innerWidth * dpr - ctx2.measureText((leftPrice).toFixed(2)).width / 2 - 5 * dpr, reserveH);
} else if (fMoveY >= canvasHeight / dpr - reserveH) {
//當觸摸點在最低點時候
//畫左下框
ctx2.beginPath()
ctx2.fillRect(-10 * dpr, canvasHeight - reserveH * dpr, ctx2.measureText((leftPrice).toFixed(2)).width + 20 * dpr, reserveH * dpr);
//畫右下框
ctx2.fillRect(window.innerWidth * dpr - ctx2.measureText((leftPrice).toFixed(2)).width - 20 * dpr, canvasHeight - reserveH * dpr, ctx2.measureText((leftPrice).toFixed(2)).width + 20 * dpr, reserveH * dpr);
//畫左右下方文字樣式
ctx2.fillStyle = '#fff'
ctx2.font = `${leftText} Arial`
ctx2.textBaseline = 'middle'
ctx2.textAlign = "center";
//畫左右下方文字
ctx2.fillText(leftPrice != 'NAN' ? (leftPrice).toFixed(2) : "--", ctx2.measureText((leftPrice).toFixed(2)).width / 2 + 5 * dpr, canvasHeight - reserveH);
ctx2.fillText(result[index] ? result[index].zzf : "--", window.innerWidth * dpr - ctx2.measureText((leftPrice).toFixed(2)).width / 2 - 5 * dpr, canvasHeight - reserveH);
} else {
ctx2.beginPath()
ctx2.fillRect(-10 * dpr, fMoveY * dpr - 10, ctx2.measureText((leftPrice).toFixed(2)).width + 20 * dpr, reserveH * dpr);
ctx2.fillRect(window.innerWidth * dpr - ctx2.measureText((leftPrice).toFixed(2)).width - 20 * dpr, fMoveY * dpr - 10, ctx2.measureText((leftPrice).toFixed(2)).width + 20 * dpr, reserveH * dpr);
//畫中間文字樣式
ctx2.fillStyle = '#fff'
ctx2.font = `${leftText} Arial`
ctx2.textBaseline = 'middle'
ctx2.textAlign = "center";
ctx2.fillText(leftPrice != 'NAN' ? (leftPrice).toFixed(2) : "--", ctx2.measureText((leftPrice).toFixed(2)).width / 2 + 5 * dpr, fMoveY * dpr + 2 * dpr);
ctx2.fillText(result[index] ? result[index].zzf : "--", window.innerWidth * dpr - ctx2.measureText((leftPrice).toFixed(2)).width / 2 - 5 * dpr, fMoveY * dpr + 2 * dpr);
}
ctx2.beginPath()
ctx2.moveTo(ctx2.measureText((leftPrice).toFixed(2)).width + 10 * dpr, parseInt(fMoveY * dpr + 5));
ctx2.lineTo(window.innerWidth * dpr - ctx2.measureText((leftPrice).toFixed(2)).width - 20 * dpr, parseInt(fMoveY * dpr + 5));
ctx2.stroke();
})
}
這裏只是提供個畫圖思路,具體狀況還項目須要,大體就這樣,代碼也許有誤,最好不要所有複製用,能夠用這個思路來畫圖