本文实例为大家分享了js canvas实现写字动画效果展示的具体代码,供大家参考,具体内容如下

页面html:

学写一个字

content=" height = device-height,

width = device-width,

initial-scale = 1.0,

minimum-scale = 1.0,

maximum-scale = 1.0,

user-scalable = no"/> //兼容移动端

您的浏览器不支持canvas

//写字区域

清 除

页面css:

#canvas{

display:block;

margin:0 auto;

}

#controller{

margin:0 auto;

}

.op_btn{

float: right;

margin:10px 0 0 10px;

border:2px solid #aaa;

width:80px;

height:40px;

line-height:40px;

font-size:20px;

text-align:center;

border-radius: 5px 5px;

cursor:pointer;

background-color: white;

font-weight:bold;

font-family: Microsoft Yahei, Arial;

}

.op_btn:hover{

background-color:#def;

}

.clearfix{

clear:both;

}

.color_btn{

float: left;

margin: 10px 10px 0 0;

border:5px solid white;

width:40px;

height:40px;

border-radius: 5px 5px;

cursor:pointer;

}

.color_btn:hover{

border: 5px solid violet;

}

.color_btn_selected{

border: 5px solid blueviolet;

}

#black_btn{

background-color: black;

}

#blue_btn{

background-color: blue;

}

#green_btn{

background-color: green;

}

#red_btn{

background-color: red;

}

#orange_btn{

background-color: orange;

}

#yellow_btn{

background-color: yellow;

}

页面js:

var canvasWidth = Math.min( 800 , $(window).width() - 20 );//如果屏幕小于800px,则取值为屏幕大小宽度,便于移动端的展示,-20是为了使得米字格不紧贴于边缘

var canvasHeight = canvasWidth;

var strokeColor = "black";

var isMouseDown = false; //鼠标按下时候的状态

var lastLoc = {x:0,y:0}; //鼠标上一次结束时的位置

var lastTimestamp = 0; //上一次时间,与笔刷粗细有关

var lastLineWidth = -1; //笔刷粗细

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

canvas.width = canvasWidth;

canvas.height = canvasHeight;

$("#controller").css("width",canvasWidth+"px");

drawGrid();//画米字格

$("#clear_btn").click(

function(e){

context.clearRect( 0 , 0 , canvasWidth, canvasHeight );

drawGrid();

}

)

$(".color_btn").click(

function(e){

$(".color_btn").removeClass("color_btn_selected");

$(this).addClass("color_btn_selected");

strokeColor = $(this).css("background-color");

}

)

//适用于移动端触控

function beginStroke(point){

isMouseDown = true

//console.log("mouse down!");

lastLoc = windowToCanvas(point.x, point.y); //上一次坐标位置

lastTimestamp = new Date().getTime();

}

function endStroke(){

isMouseDown = false;

}

function moveStroke(point){

var curLoc = windowToCanvas( point.x , point.y );

var curTimestamp = new Date().getTime();

var s = calcDistance( curLoc , lastLoc );

var t = curTimestamp - lastTimestamp;

var lineWidth = calcLineWidth( t , s );

//draw

context.beginPath();

context.moveTo( lastLoc.x , lastLoc.y );

context.lineTo( curLoc.x , curLoc.y );

context.strokeStyle = strokeColor;

context.lineWidth = lineWidth;

context.lineCap = "round";

context.lineJoin = "round";

context.stroke();

lastLoc = curLoc;

lastTimestamp = curTimestamp;

lastLineWidth = lineWidth;

}

canvas.onmousedown = function(e){

e.preventDefault();

beginStroke( {x: e.clientX , y: e.clientY} );

};

canvas.onmouseup = function(e){

e.preventDefault();

endStroke();

};

canvas.onmouseout = function(e){

e.preventDefault();

endStroke();

};

canvas.onmousemove = function(e){

e.preventDefault();

if( isMouseDown ){

moveStroke({x: e.clientX , y: e.clientY})

}

};

canvas.addEventListener('touchstart',function(e){

e.preventDefault();

touch = e.touches[0];

beginStroke( {x: touch.pageX , y: touch.pageY} )

});

canvas.addEventListener('touchmove',function(e){

e.preventDefault();

if( isMouseDown ){

touch = e.touches[0];

moveStroke({x: touch.pageX , y: touch.pageY});

}

});

canvas.addEventListener('touchend',function(e){

e.preventDefault();

endStroke();

});

var maxLineWidth = 30;

var minLineWidth = 1;

var maxStrokeV = 10;

var minStrokeV = 0.1;

function calcLineWidth( t , s ){

var v = s / t;

var resultLineWidth;

if( v <= minStrokeV )

resultLineWidth = maxLineWidth;

else if ( v >= maxStrokeV )

resultLineWidth = minLineWidth;

else{

resultLineWidth = maxLineWidth - (v-minStrokeV)/(maxStrokeV-minStrokeV)*(maxLineWidth-minLineWidth);

}

if( lastLineWidth == -1 )

return resultLineWidth;

return resultLineWidth*1/3 + lastLineWidth*2/3;

}

function calcDistance( loc1 , loc2 ){

return Math.sqrt( (loc1.x - loc2.x)*(loc1.x - loc2.x) + (loc1.y - loc2.y)*(loc1.y - loc2.y) );

}

function windowToCanvas( x , y ){

var bbox = canvas.getBoundingClientRect();

return {x:Math.round(x-bbox.left) , y:Math.round(y-bbox.top)}

}

function drawGrid(){

context.save();

context.strokeStyle = "rgb(230,11,9)";

context.beginPath();

context.moveTo( 3 , 3 );

context.lineTo( canvasWidth - 3 , 3 );

context.lineTo( canvasWidth - 3 , canvasHeight - 3 );

context.lineTo( 3 , canvasHeight - 3 );

context.closePath();

context.lineWidth = 6;

context.stroke();

context.beginPath();

context.moveTo(0,0);

context.lineTo(canvasWidth,canvasHeight);

context.moveTo(canvasWidth,0);

context.lineTo(0,canvasHeight);

context.moveTo(canvasWidth/2,0);

context.lineTo(canvasWidth/2,canvasHeight);

context.moveTo(0,canvasHeight/2);

context.lineTo(canvasWidth,canvasHeight/2);

context.lineWidth = 1;

context.stroke();

context.restore();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

javascript写字技巧_js canvas实现写字动画效果相关推荐

  1. Javascript Canvas 实现粒子动画效果分享

    今天和大家一起分享一下用 canvas 实现粒子动画效果的实现,就像下图的效果 要实现这样的效果,我们首先需要一段包含了 canvas 的基础 html 代码 <!DOCTYPE html> ...

  2. 前端必备的Canvas接口和动画效果的总结

    来源 | https://segmentfault.com/a/1190000021998875 概述 <canvas>元素用于生成图像.它本身就像一个画布,JavaScript 通过操作 ...

  3. 必备的Canvas接口和动画效果大全

    来源 | https://segmentfault.com/a/1190000021998875 1.概述 <canvas>元素用于生成图像.它本身就像一个画布,JavaScript 通过 ...

  4. php 3d animation,如何用HTML5的Canvas制作3D动画效果

    HTML5的诞生给web前端界带来了不小轰动,像什么动画旋转.图片滑块.图片轮播等等这些3D特效,也引发了不少朋友想要学习HTML5的好奇心.最近我一直在做canvas动画效果,发现canvas这个东 ...

  5. java canvas 动画效果_八大疯狂HTML5 Canvas及WebGL动画效果

    [IT168应用]HTML5.WebGL和JavaScript改变了长久以来的动画制作行业.在过去的几年中,我们想要制作卓越的网页动画只能使用Flash和Java Applet.而现在,使用脚本语言和 ...

  6. 炫酷canvas网页背景动画效果

    下载地址非常炫酷的网页背景旋转特效,基于canvas画布实现的网页背景动画效果 dd:

  7. html js 动画效果,原生js html5 canvas 3D云动画效果

    特效描述:原生js html5canvas 3D云动画效果.3D云效果,叼炸天!可用鼠标控制方向!本地要localhost才能正常演示 代码结构 1. 引入JS 2. HTML代码 varying v ...

  8. HTML+CSS+JS实现 ❤️canvas 3D云动画效果❤️

  9. 神奇的canvas——点与线绘制的绚丽动画效果

    代码地址如下: http://www.demodashi.com/demo/11636.html 前言 之前在某网站上看到了一个canvas绘制的动画效果,虽然组成的元素很简单,只有点和线,但是视觉效 ...

最新文章

  1. double转换为int以及浮点型相加损失精度问题
  2. 专家提醒:计算机专业毕业生求职三要点!
  3. mutable关键字
  4. SD-WAN部署如何使用最后一英里连接?
  5. 华为手机日历倒计时_倒计时40小时!谁来拿走这台华为手机?
  6. C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④
  7. LeetCode 257. 二叉树的所有路径 思考分析
  8. 人工智能领域开展标准化研究
  9. 【今日CV 视觉论文速览】 19 Nov 2018
  10. FCC 中级算法题 Where art thou
  11. 计算机毕业设计中用Java+Html+MySQL 实现注册、登录(servlet框架)-(二
  12. python解析css文件_Python格式化css文件的方法
  13. 数据库TCPIP协议开了,但还是远程连不上
  14. Windows 7 SP1开发完毕 已进入测试阶段
  15. 奥鹏教育计算机应用基础试题及答案,奥鹏计算机应用基础试题及答案.pdf
  16. 如何解决unity使用vs2017、vs2018、vs2019等 编辑器创建新项目时无法产生.sln文件的一个小办法
  17. 计算反转录转座子插入时间二:提取成对LTRs序列
  18. 我们是如何设计出,让玩家们有“上瘾症”的抽卡系统的
  19. 关于AJAX的一些知识
  20. 怎样访问远程服务器文件夹,访问远程服务器的共享文件夹

热门文章

  1. mybatis常用分页插件,快速分页处理
  2. gRPC android 监听server报错ProviderNotFoundException: No functional server found. Try adding a dependen
  3. java实现自动发送微信QQ消息(可发图片)
  4. 【转载】分布式存储系统的几个技术指标
  5. 《动手学深度学习》组队学习打卡Task7——词嵌入进阶
  6. ubuntu 桌面操作系统安装WPS办公软件的方法
  7. oracle取括号内数字,怎么把excel中一列文本中括号里的数字弄出来啊
  8. Cty的Linux学习笔记(十二)
  9. React 系列教程
  10. 自由窗口相关修改 AndroidQ