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

wordpress顶部是什么seo优化网站优化排名

wordpress顶部是什么,seo优化网站优化排名,做视频网站代码,有没有单纯做旅游攻略的网站前言 canvas实现画板功能&#xff0c;有画笔、矩形、橡皮擦、圆形、线段粗细、画笔颜色、下载图片等功能 是对canvas的综合学习回顾步骤 基本样式 <style type"text/css">*{margin: 0;padding: 0;box-sizing: border-box;}body{width: 100vw;height: 100vh;…

前言

canvas实现画板功能,有画笔、矩形、橡皮擦、圆形、线段粗细、画笔颜色、下载图片等功能
是对canvas的综合学习回顾

步骤

  1. 基本样式
<style type="text/css">*{margin: 0;padding: 0;box-sizing: border-box;}body{width: 100vw;height: 100vh;display: flex;flex-direction: column;justify-content: flex-start;}.caidan{height: 100px;width: 100vw;display: flex;border-bottom: 3px solid #ccc;justify-content: space-around;align-items: center;}#canvas{flex: 1;width: 100vw;}.btn{width: 150px;height: 50px;border: 1px solid #ccc;border-radius: 20px;text-align: center;line-height: 50px;color: #999;}.active{box-shadow: 0 0 20px deepskyblue;background-color: #f2f2f2;border: 1px solid deepskyblue;}</style><div class="caidan"><div class="btn" id="huabi">画笔</div><div class="btn" id="rect">矩形</div><div class="btn">圆形</div><div class="btn">线段粗细</div><div class="btn">画笔颜色</div></div><canvas id="canvas">你的浏览器不支持canvas</canvas>
  1. 画笔和矩形
思路解析:1、点击菜单项渲染阴影,触发相应的函数2、鼠标按下、弹起事件控制画板可画
  <script>// 需求// 画笔功能:能够拖动鼠标在页面内绘图  能够设置画笔粗细 设置画笔颜色// 能够在任意位置绘制圆形: 拖动鼠标可以在任意位置绘制圆形并可以定制大小// 能够在任意位置绘制矩形: 拖动鼠标可以在任意位置绘制矩形并可以定制大小// 1、找到画布对象/** @type {HTMLCanvasElement} */ var canvas= document.getElementById('canvas')console.log([canvas])canvas.setAttribute("width",canvas.offsetWidth) // 设置宽度为页面全屏canvas.setAttribute("height",canvas.offsetHeight)// 2、上下文对象,画笔var ctx=canvas.getContext('2d') // 用于2d对象绘制 webgl是3d引擎// 设置一个对象 保存画笔当前的状态var huaban = {type:null,isDrow:false, // 是否处于可画状态beginX:0, // 矩形开始时起点的位置beginY:0, // 矩形开始时起点的位置imageData:null,huabiFn:(e)=>{ // 画笔执行的内容var x = e.pageX - canvas.offsetLeft; // 找到当前鼠标位置var y = e.pageY - canvas.offsetTop;ctx.beginPath()ctx.arc(x,y,3,0,2*Math.PI) // 以当前鼠标触发的位置为中心 进行画小圆,缺点是画的快无法连贯ctx.closePath()ctx.fill()},rectFn:(e)=>{ // 矩形执行的函数var x = e.pageX - canvas.offsetLeft; // 找到当前鼠标位置var y = e.pageY - canvas.offsetTop;ctx.clearRect(0,0,canvas.offsetWidth,canvas.offsetHeight) // 画矩形前清除画板if(huaban.imageData){ // 导入之前保存的画板图像ctx.putImageData(huaban.imageData,0,0,0,0,canvas.offsetWidth,canvas.offsetHeight)}ctx.beginPath()ctx.rect(huaban.beginX,huaban.beginY,x-huaban.beginX,y-huaban.beginY) // 以当前鼠标触发的位置为中心ctx.stroke()ctx.closePath()}}function btnClick(){ // 全局清除样式document.querySelectorAll('.btn').forEach((item)=>{item.classList.remove("active")}) }// 画笔按钮点击事件var huabiBtn = document.querySelector('#huabi')huabiBtn.onclick=()=>{btnClick()huabiBtn.classList.add("active")huaban.type='huabi'}// 矩形点击事件var rectBtn = document.querySelector('#rect')rectBtn.onclick=()=>{btnClick()rectBtn.classList.add("active")huaban.type='rect'}// 监听鼠标按下事件canvas.onmousedown=(e)=>{huaban.isDraw = trueif(huaban.type=="rect"){var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;huaban.beginX=xhuaban.beginY=y}}// 监听鼠标弹起事件canvas.onmouseup=()=>{// 将当前的数据对象保留huaban.imageData = ctx.getImageData(0,0,canvas.offsetWidth,canvas.offsetHeight)huaban.isDraw = false}// 鼠标移动时绘制圆形 将源图像的目标内容清除掉canvas.onmousemove=(e)=>{if(huaban.isDraw&&huaban.type){huaban[huaban.type+'Fn'](e) // 调用当前所点的按钮}}

在这里插入图片描述

  1. 画笔优化(连贯)
上述情况下,画笔是用填充小圆的方式实现,出现问题在画的速度过快的情况下无法连贯
优化:以绘制线段的方式实现
思路:移动过程中时刻改变起点位置
// 监听鼠标移动,如果当前是画笔状态,时刻更新起点位置canvas.onmousemove=(e)=>{if(huaban.isDraw&&huaban.type){huaban[huaban.type+'Fn'](e) // 调用当前所点的按钮}if(huaban.type=="huabi"){var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;huaban.beginX=xhuaban.beginY=y}}
lineWidth:6,huabiFn:(e)=>{ // 画笔执行的内容ctx.beginPath()var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;
++        ctx.moveTo(huaban.beginX,huaban.beginY)
++        ctx.lineTo(x,y)
--        // ctx.beginPath()
++		 ctx.lineWidth=huaban.lineWidth
++        ctx.lineCap="round"
++        ctx.lineJoin="round"
--        // ctx.moveTo(huaban.beginX,huaban.beginY)
++        ctx.stroke()
--        // ctx.arc(x,y,3,0,2*Math.PI) // 以当前鼠标触发的位置为中心
--        // ctx.fill()ctx.closePath()},

效果图
在这里插入图片描述

  1. 圆形
和矩形书写方式类似
// huaban对象下添加
yuanFn:(e)=>{var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.clearRect(0,0,canvas.offsetWidth,canvas.offsetHeight)if(huaban.imageData){ctx.putImageData(huaban.imageData,0,0,0,0,canvas.offsetWidth,canvas.offsetHeight)}ctx.beginPath()ctx.arc(x,y,Math.abs(x-huaban.beginX),0,2*Math.PI) // 以当前鼠标触发的位置为中心 绝对值半径ctx.stroke()ctx.closePath()},
// 圆形var yuanBtn =  document.querySelector('#yuan')yuanBtn.onclick=()=>{btnClick()yuanBtn.classList.add("active")huaban.type='yuan'}// 监听鼠标按下事件canvas.onmousedown=(e)=>{huaban.isDraw = true
++      if(huaban.type=="rect"||huaban.type=="yuan"){var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;huaban.beginX=xhuaban.beginY=y}}

在这里插入图片描述

  1. 线段粗细
思路:设置一个字段用来控制线段粗细
<div class="caidan"><div class="btn" id="huabi">画笔</div><div class="btn" id="rect">矩形</div><div class="btn" id="yuan">圆形</div>
++   <div class="btn1 line xi">线段细</div>++  <div class="btn1 line normal">线段</div>
++   <div class="btn1 line cu">线段粗</div>
++   <div class="btn1">画笔颜色</div></div>.btn1{width: 150px;height: 50px;border: 1px solid #ccc;border-radius: 20px;text-align: center;line-height: 50px;color: #999;}.line{display: flex;justify-content: center;align-items: center;}.xi::after{content: "";background-color: #333;width: 6px;height: 6px;display: block;border-radius: 3px;}.normal::after{content: "";background-color: #333;width: 10px;height: 10px;display: block;border-radius: 5px;}.cu::after{content: "";background-color: #333;width: 16px;height: 16px;display: block;border-radius: 8px;}
// 选中样式,清除其他 回到最开始线段粗细
function btn1Click(){huaban.lineWidth=6document.querySelectorAll('.line').forEach((item)=>{item.classList.remove("active")}) }
// 设置粗细的按钮var lineDivs=document.querySelectorAll(".line")lineDivs.forEach((item,i)=>{item.onclick=()=>{btn1Click() // 清除样式item.classList.add('active')if(i==0){huaban.lineWidth=6}else if(i==1){huaban.lineWidth=16}else{huaban.lineWidth=32}}})

在这里插入图片描述

  1. 字体颜色
和设置线段粗细类似
   <div class="btn1 line cu">线段粗</div>--   <div class="btn1">画笔颜色</div>++   <div class="btn1" id="btnColor"><input type="color" id="color"></div>
// 添加color属性保存我们选中的颜色
var huaban = {type:null,isDrow:false,beginX:0,beginY:0,lineWidth:6,imageData:null,++    color:'#000',~~}
// 点击颜色组件var colorBtn =  document.querySelector('#btnColor')colorBtn.onclick=()=>{colorBtn.classList.add("active")}// 监听颜色改变事件var colorInput = document.querySelector("#color")colorInput.onchange = (e)=>{huaban.color = colorInput.value}
 huabiFn:(e)=>{ // 画笔执行的内容ctx.beginPath()var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;
++        ctx.lineWidth=huaban.lineWidth
++        ctx.strokeStyle=huaban.colorctx.lineCap="round"ctx.lineJoin="round"ctx.moveTo(huaban.beginX,huaban.beginY)ctx.lineTo(x,y)ctx.stroke()ctx.closePath()},rectFn:(e)=>{var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.clearRect(0,0,canvas.offsetWidth,canvas.offsetHeight)if(huaban.imageData){ctx.putImageData(huaban.imageData,0,0,0,0,canvas.offsetWidth,canvas.offsetHeight)}
++        ctx.lineWidth=huaban.lineWidth
++        ctx.strokeStyle=huaban.colorctx.beginPath()ctx.rect(huaban.beginX,huaban.beginY,x-huaban.beginX,y-huaban.beginY) // 以当前鼠标触发的位置为中心ctx.stroke()ctx.closePath()},yuanFn:(e)=>{var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.clearRect(0,0,canvas.offsetWidth,canvas.offsetHeight)if(huaban.imageData){ctx.putImageData(huaban.imageData,0,0,0,0,canvas.offsetWidth,canvas.offsetHeight)}
++        ctx.lineWidth=huaban.lineWidth
++        ctx.strokeStyle=huaban.colorctx.beginPath()ctx.arc(x,y,Math.abs(x-huaban.beginX),0,2*Math.PI) // 以当前鼠标触发的位置为中心ctx.stroke()ctx.closePath()},

在这里插入图片描述

  1. 下载图片
实现画布的下载保存功能
canvas.toDataURL() // 会把画布转化成base64格式的图片
调用a标签的下载事件实现
<div class="btn1" id="download">下载图片</div>
// 点击下载按钮var download = document.querySelector("#download")download.onclick=()=>{var url =  canvas.toDataURL()// console.log(url) // 打印是base64格式图片地址var img = new Image()img.src = urllet eleLink = document.createElement('a')eleLink.download = "画布图片"eleLink.style.display = 'none';eleLink.href = urleleLink.click()eleLink.remove()}

效果图
在这里插入图片描述

  1. 橡皮擦
本质上就是:颜色为画布背景色的画笔
<div class="btn" id="xpc">橡皮擦</div>var xpcBtn = document.querySelector('#xpc')xpcBtn.onclick=()=>{btnClick()xpcBtn.classList.add("active")huaban.type='xpc'}
// 对象中添加橡皮擦函数
xpcFn:(e)=>{ctx.beginPath()var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.lineWidth=huaban.lineWidthctx.strokeStyle="#fff"ctx.lineCap="round"ctx.lineJoin="round"ctx.moveTo(huaban.beginX,huaban.beginY)ctx.lineTo(x,y)ctx.stroke()ctx.closePath()},
// 鼠标移动时绘制圆形 将源图像的目标内容清除掉canvas.onmousemove=(e)=>{if(huaban.isDraw&&huaban.type){huaban[huaban.type+'Fn'](e) // 调用当前所点的按钮}
++      if(huaban.type=="huabi"||huaban.type=="xpc"){var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;huaban.beginX=xhuaban.beginY=y}}
  1. 全部代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style type="text/css">*{margin: 0;padding: 0;box-sizing: border-box;}body{width: 100vw;height: 100vh;display: flex;flex-direction: column;justify-content: flex-start;}.caidan{height: 100px;width: 100vw;display: flex;border-bottom: 3px solid #ccc;justify-content: space-around;align-items: center;}#canvas{flex: 1;width: 100vw;}.btn{width: 150px;height: 50px;border: 1px solid #ccc;border-radius: 20px;text-align: center;line-height: 50px;color: #999;}.active{box-shadow: 0 0 20px deepskyblue;background-color: #f2f2f2;border: 1px solid deepskyblue;}.btn1{width: 150px;height: 50px;border: 1px solid #ccc;border-radius: 20px;text-align: center;line-height: 50px;color: #999;}.line{display: flex;justify-content: center;align-items: center;}.xi::after{content: "";background-color: #333;width: 6px;height: 6px;display: block;border-radius: 3px;}.normal::after{content: "";background-color: #333;width: 10px;height: 10px;display: block;border-radius: 5px;}.cu::after{content: "";background-color: #333;width: 16px;height: 16px;display: block;border-radius: 8px;}</style>
</head>
<body><div class="caidan"><div class="btn" id="huabi">画笔</div><div class="btn" id="rect">矩形</div><div class="btn" id="yuan">圆形</div><div class="btn" id="xpc">橡皮擦</div><div class="btn1" id="download">下载图片</div><div class="btn1 line xi active">线段细</div><div class="btn1 line normal">线段</div><div class="btn1 line cu">线段粗</div><div class="btn1" id="btnColor"><input type="color" id="color"></div></div><canvas id="canvas">你的浏览器不支持canvas</canvas><script>// 需求// 画笔功能:能够拖动鼠标在页面内绘图  能够设置画笔粗细 设置画笔颜色// 能够在任意位置绘制圆形: 拖动鼠标可以在任意位置绘制圆形并可以定制大小// 能够在任意位置绘制矩形: 拖动鼠标可以在任意位置绘制矩形并可以定制大小// 1、找到画布对象/** @type {HTMLCanvasElement} */ var canvas= document.getElementById('canvas')console.log([canvas])canvas.setAttribute("width",canvas.offsetWidth)canvas.setAttribute("height",canvas.offsetHeight)// 2、上下文对象,画笔var ctx=canvas.getContext('2d') // 用于2d对象绘制 webgl是3d引擎// 设置一个对象 保存画笔当前的状态var huaban = {type:null,isDrow:false,beginX:0,beginY:0,lineWidth:6,imageData:null,color:'#000',huabiFn:(e)=>{ // 画笔执行的内容ctx.beginPath()var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.lineWidth=huaban.lineWidthctx.strokeStyle=huaban.colorctx.lineCap="round"ctx.lineJoin="round"ctx.moveTo(huaban.beginX,huaban.beginY)ctx.lineTo(x,y)// ctx.beginPath()// ctx.moveTo(huaban.beginX,huaban.beginY)ctx.stroke()// ctx.arc(x,y,3,0,2*Math.PI) // 以当前鼠标触发的位置为中心// ctx.fill()ctx.closePath()},xpcFn:(e)=>{ctx.beginPath()var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.lineWidth=huaban.lineWidthctx.strokeStyle="#fff"ctx.lineCap="round"ctx.lineJoin="round"ctx.moveTo(huaban.beginX,huaban.beginY)ctx.lineTo(x,y)ctx.stroke()ctx.closePath()},rectFn:(e)=>{var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.clearRect(0,0,canvas.offsetWidth,canvas.offsetHeight)if(huaban.imageData){ctx.putImageData(huaban.imageData,0,0,0,0,canvas.offsetWidth,canvas.offsetHeight)}ctx.lineWidth=huaban.lineWidthctx.strokeStyle=huaban.colorctx.beginPath()ctx.rect(huaban.beginX,huaban.beginY,x-huaban.beginX,y-huaban.beginY) // 以当前鼠标触发的位置为中心ctx.stroke()ctx.closePath()},yuanFn:(e)=>{var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;ctx.clearRect(0,0,canvas.offsetWidth,canvas.offsetHeight)if(huaban.imageData){ctx.putImageData(huaban.imageData,0,0,0,0,canvas.offsetWidth,canvas.offsetHeight)}ctx.lineWidth=huaban.lineWidthctx.strokeStyle=huaban.colorctx.beginPath()ctx.arc(x,y,Math.abs(x-huaban.beginX),0,2*Math.PI) // 以当前鼠标触发的位置为中心ctx.stroke()ctx.closePath()},}function btnClick(){document.querySelectorAll('.btn').forEach((item)=>{item.classList.remove("active")}) }function btn1Click(){huaban.lineWidth=6document.querySelectorAll('.line').forEach((item)=>{item.classList.remove("active")}) }// 画笔按钮点击事件var huabiBtn = document.querySelector('#huabi')huabiBtn.onclick=()=>{btnClick()huabiBtn.classList.add("active")huaban.type='huabi'}var rectBtn = document.querySelector('#rect')rectBtn.onclick=()=>{btnClick()rectBtn.classList.add("active")huaban.type='rect'}// 圆形var yuanBtn =  document.querySelector('#yuan')yuanBtn.onclick=()=>{btnClick()yuanBtn.classList.add("active")huaban.type='yuan'}// 橡皮擦var xpcBtn = document.querySelector('#xpc')xpcBtn.onclick=()=>{btnClick()xpcBtn.classList.add("active")huaban.type='xpc'}// 设置粗细的按钮var lineDivs=document.querySelectorAll(".line")lineDivs.forEach((item,i)=>{item.onclick=()=>{btn1Click() // 清除样式item.classList.add('active')if(i==0){huaban.lineWidth=6}else if(i==1){huaban.lineWidth=16}else{huaban.lineWidth=32}}})// 点击颜色组件var colorBtn =  document.querySelector('#btnColor')colorBtn.onclick=()=>{colorBtn.classList.add("active")}// 监听颜色改变事件var colorInput = document.querySelector("#color")colorInput.onchange = (e)=>{huaban.color = colorInput.value}// 点击下载按钮var download = document.querySelector("#download")download.onclick=()=>{var url =  canvas.toDataURL()// console.log(url) // 打印是base64格式图片地址var img = new Image()img.src = urllet eleLink = document.createElement('a')eleLink.download = "画布图片"eleLink.style.display = 'none';eleLink.href = urleleLink.click()eleLink.remove()}// 监听鼠标按下事件canvas.onmousedown=(e)=>{huaban.isDraw = trueif(huaban.type=="rect"||huaban.type=="yuan"){var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;huaban.beginX=xhuaban.beginY=y}}// 监听鼠标弹起事件canvas.onmouseup=()=>{// 将当前的数据对象保留huaban.imageData = ctx.getImageData(0,0,canvas.offsetWidth,canvas.offsetHeight)huaban.isDraw = false}// 鼠标移动时绘制圆形 将源图像的目标内容清除掉canvas.onmousemove=(e)=>{if(huaban.isDraw&&huaban.type){huaban[huaban.type+'Fn'](e) // 调用当前所点的按钮}if(huaban.type=="huabi"||huaban.type=="xpc"){var x = e.pageX - canvas.offsetLeft; // 找到当前位置var y = e.pageY - canvas.offsetTop;huaban.beginX=xhuaban.beginY=y}}</script>
</body>
</html>
http://www.lbrq.cn/news/2600245.html

相关文章:

  • 湘潭做网站价格 d磐石网络关于搜索引擎的搜索技巧
  • 龙华区城市建设局网站百度网站客服
  • 表格网站滚动字体怎么做的seo外包公司怎么样
  • 营销型企业网站建设教案关键词排名手机优化软件
  • 集团门户网站建设费用科目免费seo推广软件
  • 怎么做视频还有网站吗最近韩国电影片
  • 深圳百度推广电话seo排名系统源码
  • 手机收藏网站代码视频号视频下载助手app
  • 做违法网站会怎样seo网站推广的主要目的是什么
  • 短视频营销策划方案范文百度关键词优化首选667seo
  • 产品设计工资一般多少seo网站有优化培训吗
  • 秦皇岛海三建设广州seo网站推广公司
  • 阿里巴巴做公司网站磁力屋 最好用
  • 权威的锦州网站建设seo职位招聘
  • 怎么查那些人输入做网站3分钟搞定网站seo优化外链建设
  • 上海网站设计kinglinkwindows优化大师是什么
  • 网站经营性备案百度广告推广价格
  • 网站建设委托外包协议网站权重查询
  • 长沙手机模板建站快排seo软件
  • 页面设计的网站九易建网站的建站流程
  • 铁岭做网站包括哪些中国职业培训在线官方网站
  • 信阳电子商务网站建设单页应用seo如何解决
  • wordpress代码添加文章字段栏目关键词查询优化
  • 天津河西做网站公司百度指数网址
  • 寻找东莞微信网站建设seo先上排名后收费
  • wordpress虚拟3d网站网络推广方案模板
  • 怎样建设有价值的网站小程序开发文档
  • 自己做的网站涉黄阿里指数官网最新版本
  • 免费制作网站和网页成都seo培
  • 建设雅马哈摩托车官网报价及图片网站关键词排名优化
  • python的高校班级管理系统
  • 深入浅出 RabbitMQ-路由模式详解
  • C++高频知识点(十四)
  • 机器学习 入门——决策树分类
  • 数据结构:单向链表的函数创建
  • 2106. 摘水果