//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();
})
}
这里只是提供个画图思路,具体状况还项目须要,大体就这样,代码也许有误,最好不要所有复制用,能够用这个思路来画图