3.4.1.1_光标的擦除
来源:互联网 发布:超级sql注入工具 使用 编辑:程序博客网 时间:2024/06/16 08:58
3.4.1.1_光标的擦除
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>光标的擦除</title> <style> body{ background: #eee; } #canvas{ background: #fff; cursor: pointer; margin-left: 10px; margin-top: 10px; box-shadow: 4px 4px 8px rgba(0,0,0,0.5); -webkit-box-shadow: 4px 4px 8px rgba(0,0,0,0.5); -moz-box-shadow: 4px 4px 8px rgba(0,0,0,0.5); } #controls{ position: absolute; left: 25px; top: 25px; } </style> </head> <body> <canvas id="canvas" width="1000" height="600"></canvas> <div id="controls"> 字体: <select id="fontStyleSelect"> <option value="palatino">palatino</option> <option value="lucida">lucida</option> <option value="fantasy">fantasy</option> <option value="copperplate">copperplate</option> <option value="tahoma" selected>tahoma</option> <option value="verdana">verdana</option> <option value="impact">impact</option> <option value="century">century</option> </select> 字体大小: <select id="fontSizeSelect"> <option value="20px" selected>20px</option> <option value="30px">30px</option> <option value="40px">40px</option> <option value="50px">50px</option> <option value="60px">60px</option> </select> 字体填充颜色: <select id="fontColorSelect"> <option value="red">red</option> <option value="green">green</option> <option value="blue">blue</option> <option value="orange">orange</option> <option value="cornflowerblue" selected>cornflowerblue</option> <option value="goldenrod">goldenrod</option> <option value="navy">navy</option> <option value="purple">purple</option> </select> </div> </body> <!-- 可以单独保存为一个独立的JS文件 --> <script> //组合使用构造函数与原型模式 TextCursor = function (width,fillStyle){ this.width = width || 2; this.fillStyle = fillStyle || 'rgba(0,0,0,0.5)'; this.left = 0; this.top = 0; }; TextCursor.prototype = { //设置光标高度为当前字体的字符框值的1又6分之一 getHeight:function(context){ var h = context.measureText('M').width; //得到字符框值 return h+h/6; }, createPath:function(context){ context.beginPath(); //创建光标所在路径 context.rect(this.left,this.top,this.width,this.getHeight(context)); }, draw:function(context,left,bottom){ context.save(); this.left = left; this.top = bottom -this.getHeight(context); this.createPath(context); context.fillStyle = this.fillStyle; context.fill(); context.restore(); }, erase:function (context,imageData){ //恢复光标处的像素 context.putImageData(imageData,0,0,this.left,this.top,this.width,this.getHeight(context)); console.log(this.left,this.top,this.width,this.getHeight(context)); } } </script> <script> var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); var fontStyleSelect = document.getElementById('fontStyleSelect'); var fontSizeSelect = document.getElementById('fontSizeSelect'); var fontColorSelect = document.getElementById('fontColorSelect'); var drawingSurfaceImageData; var fillStyle = fontColorSelect.value; var str = fontSizeSelect.value +' '+ fontStyleSelect.value; //创建新的光标对象 var cursor= new TextCursor(2,fillStyle); ; saveDrawingSurface(); //canvas事件控制器 canvas.onmousedown = function(e){ var loc = windowToCanvas(e.clientX,e.clientY); context.font = str; cursor.fillStyle = fillStyle; //这里erase的left,top在没有执行draw之前,记录的正是上一次的光标点的left,top,width,height cursor.erase(context,drawingSurfaceImageData); cursor.draw(context,loc.x,loc.y); } fontStyleSelect.onchange = function(){ str = fontSizeSelect.value +' '+ fontStyleSelect.value; } fontSizeSelect.onchange = function(){ str = fontSizeSelect.value +' '+ fontStyleSelect.value; } fontColorSelect.onchange = function (){ fillStyle = fontColorSelect.value; } //得到鼠标在canvas画布中的坐标 function windowToCanvas(x,y){ var bbox = canvas.getBoundingClientRect(); return { x:x-bbox.left*(canvas.width/bbox.width), y:y-bbox.top*(canvas.height/bbox.height) } }; //保存画布数据 function saveDrawingSurface(){ drawingSurfaceImageData = context.getImageData(0,0,canvas.width,canvas.height); } </script></html>
0 0
- 3.4.1.1_光标的擦除
- 3.4.1.2_光标的闪烁效果
- 3.4.1_指示文本输入位置的光标
- Java泛型_擦除
- 3.4.1.2_光标的闪烁效果_清定时器版本
- 泛型(二)->擦除&擦除带来的问题
- 泛型的擦除
- 擦除的补偿
- flash的读写擦除
- 泛型的擦除
- Java擦除的问题
- Java的类型擦除
- 32_手机超级管理员&一键锁屏,擦除数据
- 擦除
- 擦除
- VC++_光标等待问题
- Java中泛型是类型擦除的
- Java 泛型 擦除的补偿
- HTTP和HTTPS详解
- 防止自己忘记,看其他人博客 放自己这里
- 简单粗暴地理解js原型链--js面向对象编程
- APNS推送服务介绍
- Kafka中Topic级别配置
- 3.4.1.1_光标的擦除
- 关于js中两种定时器的设置及清除 [转发]
- Cocos2d-js模块化开发的一种解决方案
- 完全卸载mysql
- Thinking In Java学习进程---对象的入门1.5 继承:重新使用接口
- weblogic自定义的log4j2
- JAVA NIO解析
- 剑指Offer——(17)树的子结构
- Python eventlet