当前位置: 首页 > news >正文

做空比特币的网站bt磁力种子

做空比特币的网站,bt磁力种子,怎么做多个网站单点登录,18款禁用网站app破解版最近挺忙的,几乎没有时间去更新博客,今天正好在学习新东西,正好和大家分享一下。 最近要做一个使用canvas完成图片平移,缩放,添加标注的需求,完成的效果大概如下: 使用canvas内置api完成图片的缩…

最近挺忙的,几乎没有时间去更新博客,今天正好在学习新东西,正好和大家分享一下。
最近要做一个使用canvas完成图片平移,缩放,添加标注的需求,完成的效果大概如下:

使用canvas内置api完成图片的缩放平移和导出和添加提示

最终的代码如下,这是使用canvas内置api完成的,缩放用到的是scale方法,平移用的是canvas的translate方法,代码中每个地方会有对应的注释,代码都是自己写的,如果又不懂得可以留言。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>* {padding: 0;margin: 0;box-sizing: border-box;}.content {position: relative;margin: 50px;height: 500px;border: 5px solid red;overflow: hidden;}#canvas {position: absolute;top: 0;left: 50%;transform: translateX(-50%);border: 5px solid pink;cursor: grab;}.btnx {position: absolute;bottom: 0;left: 0;width: 100%;display: flex;align-items: center;justify-content: center;background-color: pink;height: 50px;cursor: pointer;}.btn {text-align: center;flex: 1;}.btn2 {display: none;}.btn5 {display: none;}</style>
</head><body><div class="content"><canvas id="canvas" width="500" height="400"></canvas><div class="btnx"><div class="btn btn1">裁剪</div><div class="btn btn2">取消</div><div class="btn btn3">放大x0.5</div><div class="btn btn4">缩小x0.5</div><div class="btn btn5">导出</div><div class="btn btn6">显示或隐藏tips</div></div></div><script>const btn1 = document.querySelector('.btn1')const btn2 = document.querySelector('.btn2')const btn3 = document.querySelector('.btn3')const btn4 = document.querySelector('.btn4')const btn5 = document.querySelector('.btn5')const btn6 = document.querySelector('.btn6')// canvas的domconst canvas = document.querySelector('#canvas')// canvas宽度const canvasWidth = 500// canvas高度const canvasHeight = 400// 定义画布的初始位置var canvasX = 0;var canvasY = 0;// 定义拖动的初始位置var dragStartX = 0;var dragStartY = 0;// 当前是否正在拖拽元素var isDragging = false;// 当前是否正在绘制元素var isDrawing = false;// 当前的缩放var scale = 1.0;// 存储绘制矩形的坐标和大小var rect = {};// 新增的canvas的个数let newCanvasCount = 0// 是否显示tipslet isShowtips=falseconst ctx = canvas.getContext('2d')canvas.setAttribute('width', canvasWidth)canvas.setAttribute('height', canvasHeight)// 获取图片let img = new Image();img.src = "./imgs/girl.webp";img.onload = function () {drawImageByScale()}btn2.addEventListener('click', function () {newCanvasCount = 0btn2.style.display = 'none'btn5.style.display = 'none'btn1.style.display = 'block'canvas.style.cursor = 'grab'// 充值绘制当前图片drawImageByScale()// 移除所有新增的canvas// const allCanvas = document.querySelectorAll('[id^="newcanvas-"]');// allCanvas.forEach((item, index) => {//     document.body.removeChild(item)// })// console.log(allCanvas);// 移除所有的监听器clearEventListeners()// 重新添加让可以移动图标的鼠标监听器handleCanvasMove()})btn3.addEventListener('click', function () {scale += 0.5drawImageByScale()})btn4.addEventListener('click', function () {scale = Math.max(0.1, scale - 0.5)drawImageByScale()})btn5.addEventListener('click', exportImage);btn6.addEventListener('click', function () {isShowtips=!isShowtipsdrawImageByScale()})btn1.addEventListener('click', function () {clearEventListeners()btn2.style.display = 'block'btn5.style.display = 'block'btn1.style.display = 'none'canvas.style.cursor = 'crosshair'canvas.addEventListener('mousedown', handleDrawRectMouseDown);canvas.addEventListener('mousemove', handleDrawRectMouseMove);canvas.addEventListener('mouseup', handleDrawRectMouseUp);})// 让canvas可以移动handleCanvasMove()// 让canvas可以缩放handleCanvsZoom()// 绘制矩形function DrawRect() {ctx.clearRect(0, 0, canvas.width, canvas.height);if (!isDrawing) return;// 第一种样式:绘制一个填充矩形// ============开始==============// ctx.fillStyle = 'rgba(0, 0, 255, 0.5)';// drawImageByScale();// ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);// ============结束==============// 第二种样式:绘制一个边框// ============开始==============ctx.lineWidth = 10ctx.strokeStyle = 'rgba(0, 0, 255, 0.5)';drawImageByScale()ctx.strokeRect(rect.startX, rect.startY, rect.w, rect.h);// ============结束==============}// 获取鼠标在canvas中的x和y坐标function handleDrawRectMouseDown(e) {// rect.startX代表鼠标在canvas内的x坐标// e.clientX用于获取鼠标在浏览器中的横向坐标// canvas.getBoundingClientRect().left用于获取canvas的左边框相对于浏览器的距离rect.startX = e.clientX - canvas.getBoundingClientRect().left;rect.startY = e.clientY - canvas.getBoundingClientRect().top;isDrawing = true;}// 获取绘制的矩形的宽和高function handleDrawRectMouseMove(e) {if (!isDrawing) return;// rect.w和rect.h就代表了矩形的像素大小rect.w = (e.clientX - canvas.getBoundingClientRect().left) - rect.startX;rect.h = (e.clientY - canvas.getBoundingClientRect().top) - rect.startY;DrawRect();}// 停止移动function handleDrawRectMouseUp(e) {isDrawing = false;}// 鼠标按下拖拽图片function handleDragMouseDown(event) {isDragging = true;// 记录鼠标按下时的位置dragStartX = event.clientX;dragStartY = event.clientY;}// 鼠标按下移动拖拽图片function handleDragMouseMove(event) {if (isDragging) {// 计算鼠标移动的距离// deltaX的数值是根据鼠标移动的数据来计算的,鼠标速度越快这个数值越大var deltaX = event.clientX - dragStartX;var deltaY = event.clientY - dragStartY;// 更新画布的位置canvasX += deltaX;canvasY += deltaY;// 更新拖动起点位置dragStartX = event.clientX;dragStartY = event.clientY;drawImageByScale()}}// 鼠标松开拖拽图片function handleDragMouseUp() {isDragging = false;}// 导出绘制好的图片function exportImage() {newCanvasCount += 1// 创建新的 canvas 元素var croppedCanvas = document.createElement('canvas');var croppedCtx = croppedCanvas.getContext('2d');// 设置新的 canvas 尺寸croppedCanvas.setAttribute('width', rect.w + 'px')croppedCanvas.setAttribute('height', rect.h + 'px')croppedCanvas.setAttribute('id', `newcanvas-${newCanvasCount}`)document.body.appendChild(croppedCanvas)// 在新的 canvas 上绘制矩形圈起来的部分croppedCtx.drawImage(canvas, rect.startX, rect.startY, rect.w, rect.h, 0, 0, rect.w, rect.h);// console.log('rect', rect);// 将新的 canvas 导出为图片var imgData = croppedCanvas.toDataURL('image/png');// console.log('imgData', imgData);// 创建一个链接并下载图片var link = document.createElement('a');link.href = imgData;link.download = 'cropped_image.png';link.click();}// 处理移动图片function handleCanvasMove() {canvas.addEventListener('mousedown', handleDragMouseDown);canvas.addEventListener('mousemove', handleDragMouseMove);document.addEventListener('mouseup', handleDragMouseUp);}// 处理缩放图片function handleCanvsZoom() {function zoom(event) {event.preventDefault()// 根据鼠标滚轮方向更新缩放倍数if (event.deltaY < 0) {// 向上滚动,放大画布scale *= 1.1; // 增加10%} else {// 向下滚动,缩小画布scale /= 1.1; // 减小10%}drawImageByScale()}// Add event listener for mouse wheelcanvas.addEventListener('wheel', zoom);}// 清除监控器function clearEventListeners() {canvas.removeEventListener('mousedown', handleDrawRectMouseDown)canvas.removeEventListener('mousedown', handleDragMouseDown)canvas.removeEventListener('mousemove', handleDrawRectMouseMove)canvas.removeEventListener('mousemove', handleDragMouseMove)canvas.removeEventListener('mouseup', handleDrawRectMouseUp)canvas.removeEventListener('mouseup', handleDragMouseUp)}// 通过当前的缩放比和平移的位置来进行绘制图像function drawImageByScale() {// 清空画布ctx.clearRect(0, 0, canvas.width, canvas.height);// 保存当前的绘图状态ctx.save();// 缩放画布ctx.scale(scale, scale);// 平移到当前的画布位置ctx.translate(canvasX, canvasY);// 重新绘制画布内容ctx.drawImage(img, 0, 0, canvasWidth, canvasHeight);if(isShowtips){addToolTip()}// 恢复之前保存的绘图状态,避免影响到其他绘图操作ctx.restore();}// 添加提示function addToolTip() {// 绘制选段ctx.beginPath();ctx.moveTo(280, 150);ctx.lineTo(300, 130);ctx.lineTo(360, 130);ctx.strokeStyle = 'pink'ctx.lineWidth = 3ctx.stroke();ctx.beginPath();// 绘制文字ctx.fillStyle = 'pink'ctx.font = "15px Verdana";ctx.fillText('愛你哦!!!', 310, 120)}</script>
</body></html>

文章转载自:
http://dinncoklm.tpps.cn
http://dinncohorae.tpps.cn
http://dinncohulled.tpps.cn
http://dinncohillsite.tpps.cn
http://dinncokilogramme.tpps.cn
http://dinncoepisematic.tpps.cn
http://dinncokowloon.tpps.cn
http://dinncocobwebbery.tpps.cn
http://dinncosmoodge.tpps.cn
http://dinncograndeur.tpps.cn
http://dinncoaccommodate.tpps.cn
http://dinnconannofossil.tpps.cn
http://dinncogiardiasis.tpps.cn
http://dinncolincomycin.tpps.cn
http://dinncosmaze.tpps.cn
http://dinncoimperturbed.tpps.cn
http://dinncoamputator.tpps.cn
http://dinncobrewery.tpps.cn
http://dinncosubstrata.tpps.cn
http://dinncofb.tpps.cn
http://dinncocenote.tpps.cn
http://dinncofane.tpps.cn
http://dinncoencyst.tpps.cn
http://dinncomeemies.tpps.cn
http://dinncoscratchy.tpps.cn
http://dinncocopesmate.tpps.cn
http://dinncofluey.tpps.cn
http://dinncoconvict.tpps.cn
http://dinncojackassery.tpps.cn
http://dinncoantinational.tpps.cn
http://dinncosphingolipidosis.tpps.cn
http://dinncoantitoxin.tpps.cn
http://dinncofumaric.tpps.cn
http://dinncotrusteeship.tpps.cn
http://dinncounmatchable.tpps.cn
http://dinncoholocene.tpps.cn
http://dinncoconj.tpps.cn
http://dinncoornithologic.tpps.cn
http://dinncoafloat.tpps.cn
http://dinncoheliport.tpps.cn
http://dinncoisobutane.tpps.cn
http://dinncofritillaria.tpps.cn
http://dinncosociological.tpps.cn
http://dinncomelchiades.tpps.cn
http://dinncochoplogical.tpps.cn
http://dinncoatmospherically.tpps.cn
http://dinncocardiopulmonary.tpps.cn
http://dinncoplagioclase.tpps.cn
http://dinncolaughingstock.tpps.cn
http://dinncogorgio.tpps.cn
http://dinncounbolted.tpps.cn
http://dinncotache.tpps.cn
http://dinncobargainor.tpps.cn
http://dinncopristane.tpps.cn
http://dinncorefractive.tpps.cn
http://dinncocasefy.tpps.cn
http://dinncoflamboyant.tpps.cn
http://dinncounmistakable.tpps.cn
http://dinncounburnt.tpps.cn
http://dinncopelter.tpps.cn
http://dinncosverdlovsk.tpps.cn
http://dinncowyoming.tpps.cn
http://dinncomortlake.tpps.cn
http://dinncoleporid.tpps.cn
http://dinncocounterrotating.tpps.cn
http://dinncoveep.tpps.cn
http://dinncokinematics.tpps.cn
http://dinnconeutralism.tpps.cn
http://dinncospessartite.tpps.cn
http://dinncodiscomfit.tpps.cn
http://dinncosullage.tpps.cn
http://dinncouniserial.tpps.cn
http://dinncosoapberry.tpps.cn
http://dinncosemimystical.tpps.cn
http://dinncowasteful.tpps.cn
http://dinncounlimitedly.tpps.cn
http://dinncocornflakes.tpps.cn
http://dinncoadagiettos.tpps.cn
http://dinncoholomorphy.tpps.cn
http://dinncomortarman.tpps.cn
http://dinncoanticholinesterase.tpps.cn
http://dinncodsp.tpps.cn
http://dinncosardanapalian.tpps.cn
http://dinncocabinetwork.tpps.cn
http://dinncouncial.tpps.cn
http://dinncoerupt.tpps.cn
http://dinncoiv.tpps.cn
http://dinncounite.tpps.cn
http://dinncoeuthanatize.tpps.cn
http://dinncocingulate.tpps.cn
http://dinncolamellibranch.tpps.cn
http://dinncoescheatage.tpps.cn
http://dinncosleugh.tpps.cn
http://dinncowhiteware.tpps.cn
http://dinncolinguistical.tpps.cn
http://dinncopericardium.tpps.cn
http://dinncooutpoll.tpps.cn
http://dinncodemit.tpps.cn
http://dinncoslic.tpps.cn
http://dinncopeculator.tpps.cn
http://www.dinnco.com/news/152481.html

相关文章:

  • 网站做的像会侵权吗可以免费打广告的网站
  • wordpress手机端兼容seo网站建设优化什么意思
  • 江门外贸网站建设深圳网站制作公司
  • 自创网站厦门seo计费
  • 今日疫情通报seo资讯推推蛙
  • wordpress 数据库编码武汉seo招聘信息
  • 外国做图网站百度竞价优缺点
  • 桂林网站制作最近发生的新闻事件
  • 一个人做网站设计兼职seo优化教程培训
  • 常州模板建站代理seo做得比较好的公司
  • 做问卷调查用哪个网站淘宝定向推广
  • 做网站和自媒体哪个好系列推广软文范例
  • 网站关键字优化销售发帖推广
  • 如何制作网站地图兰州网站seo优化
  • 可以做vx数独的网站成都门户网站建设
  • 网站建设简介联系方式广州网络推广公司排名
  • 长治市建设局网站seo教程技术资源
  • 用什么网站做一手房最好怎么在百度上做推广
  • 电商平台入驻条件seo快排
  • 企业网站建设多长时间私域流量运营管理
  • 淘宝接单做网站bt种子搜索
  • 广州天河建网站外包seo公司
  • 电子商务网站设计岗位主要是?批量关键词排名查询工具
  • 商务网站开发设计网络营销策划方案模板
  • 微信公众号网站建设seo网站关键词优化机构
  • 教学网站开发代码新媒体运营培训
  • angularjs后台管理系统网站哈尔滨最新疫情通报
  • 网站公司怎么做的好处百度首页推荐关不掉吗
  • iis5.1 发布网站网络推广引流方式
  • 网站代码跑偏了怎么做网络推广外包公司