详解如何用canvas画一个微笑的表情


Posted in HTML / CSS onMarch 14, 2019

实习期间让我用canvas画一个表情,比较简单,话不多说直接上代码:

<body>

<div id="canvas-warp">
    <canvas id="canvas" style="display: block; margin: 200px auto;">
        你的浏览器居然不支持Canvas!
    </canvas>
</div>
<script>
    window.onload = function () {
        var canvas = document.getElementById("canvas");
        canvas.width = 400;
        canvas.height = 400;
        //获取上下文
        var context = canvas.getContext("2d");
        //用于画有填充色圆的函数  参数分别为圆心坐标 ,半径,起始与终止位置,线颜色,填充颜色
        function drawCircle(x2, y2, r2, a2, b2, lineColor, FillColor) {
            context.beginPath();
            context.arc(x2, y2, r2, a2, b2 * Math.PI);
            context.strokeStyle = lineColor;
            context.fillStyle = FillColor;
            context.fill(); //确认填充
            context.stroke();
        };
        //用于画圆弧函数 默认线条为黑色 无填充 参数分别为:圆心x坐标,圆心y坐标,半径,开始位置,终止位置
        function drawsArc(x, y, r, l1, l2) {
            context.beginPath();
            context.arc(x, y, r, l1 * Math.PI, l2 * Math.PI);
            context.strokeStyle = "black";
            context.stroke();
        };
        //用于画眼睛的函数
        function darwEyes(x1, y1, a1, b1) { //参数分别为椭圆圆心位置 长轴  短轴
            context.strokeStyle = "#754924"
            ParamEllipse(context, x1, y1, a1, b1); //椭圆
            function ParamEllipse(context, x, y, a, b) {
                //使每次循环所绘制的路径(弧线)接近1像素
                var step = (a > b) ? 1 / a : 1 / b;
                context.beginPath();
                context.moveTo(x + a, y); //从椭圆的左端点开始绘制
                for (var i = 0; i < 2 * Math.PI; i += step) {
                    //参数为i,表示度数(弧度)
                    context.lineTo(x + a * Math.cos(i), y + b * Math.sin(i));
                }
                context.closePath();
                context.fillStyle = "#754924";
                context.fill(); 
                context.stroke();
            };
        };
        //脸
        drawCircle(200, 200, 200, 0, 2, "#EEE685", "#FCF200");
        //左眼
        context.strokeStyle = "#754924"
        darwEyes(116, 130, 18, 25);
        drawCircle(110, 127, 12, 0, 2, "#754924", "#F5F5F5");
        //右眼
        darwEyes(296, 130, 18, 25);
        drawCircle(290, 127, 12, 0, 2, "#754924", "#F5F5F5");
        //左眉毛
        drawsArc(100, 100, 50, 1.3, 1.7);
        //右眉毛
        drawsArc(300, 100, 50, 1.3, 1.7);
        //嘴巴
        drawsArc(200, 120, 180, 0.3, 0.7);
    }
</script>
</body>

效果图

详解如何用canvas画一个微笑的表情

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

HTML / CSS 相关文章推荐
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
Jun 15 HTML / CSS
css3动画效果抖动解决方法
Sep 03 HTML / CSS
css3中background新增的4个新的相关属性用法介绍
Sep 26 HTML / CSS
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
Oct 11 HTML / CSS
CSS3提交意见输入框样式代码
Oct 30 HTML / CSS
全方位了解CSS3的Regions扩展
Aug 07 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
Jul 06 HTML / CSS
canvas绘制表情包的示例代码
Jul 09 HTML / CSS
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
Nov 07 HTML / CSS
Canvas制作旋转的太极的示例
Mar 09 HTML / CSS
HTML页面滚动时部分内容位置固定不滚动的实现
Apr 14 HTML / CSS
css 边框添加四个角的实现代码
Oct 16 HTML / CSS
使用html2canvas将页面转成图并使用用canvas2image下载
Apr 04 #HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
Apr 10 #HTML / CSS
canvas画布实现手写签名效果的示例代码
Apr 23 #HTML / CSS
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
Apr 26 #HTML / CSS
html5中监听canvas内部元素点击事件的三种方法
Apr 28 #HTML / CSS
Html5实现单张、多张图片上传功能
Apr 28 #HTML / CSS
鲜为人知的HTML5语音合成功能
May 17 #HTML / CSS
You might like
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
PHP通用检测函数集合
2011/02/08 PHP
php中Snoopy类用法实例
2015/06/19 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
javascript中创建对象的三种常用方法
2010/12/30 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Promise扫盲贴
2019/06/24 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python实现在pickling的时候压缩的方法
2014/09/25 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python list运算操作代码实例解析
2020/01/20 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
HTML5 Web 存储详解
2016/09/16 HTML / CSS
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
新闻专业本科生的自我评价分享
2013/11/20 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
英语教师自荐信
2014/05/26 职场文书
大明湖导游词
2015/02/03 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis