详解如何用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 相关文章推荐
45个非常奇妙的CSS3 特性应用示例
Jan 01 HTML / CSS
简单总结CSS3中视窗单位Viewport的常见用法
Feb 04 HTML / CSS
CSS3中伪元素::before和::after的用法示例
Sep 18 HTML / CSS
详解Sticky Footer 绝对底部的两种套路
Nov 03 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
Dec 13 HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
Jan 03 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
Jun 02 HTML / CSS
从零实现一个自定义html5播放器的示例代码
Aug 01 HTML / CSS
Html5+CSS3+EL表达式问题小结
Dec 19 HTML / CSS
能用CSS实现的就不要麻烦JavaScript了
Oct 05 HTML / CSS
纯 CSS 自定义多行省略的问题(从原理到实现)
Nov 11 HTML / CSS
CSS子盒子水平和垂直居中的五种方法
Jul 23 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中操作ini配置文件的方法
2013/04/25 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php实现的通用图片处理类
2015/03/24 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
javascript整除实现代码
2010/11/23 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python中用sleep()方法操作时间的教程
2015/05/22 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
Python continue语句实例用法
2020/02/06 Python
python安装后的目录在哪里
2020/06/21 Python
利用python实现汉诺塔游戏
2021/03/01 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
为什么要使用servlet
2016/01/17 面试题
应聘医药代表职位求职信
2013/10/21 职场文书
高中军训感言600字
2014/03/11 职场文书
创业培训计划书
2014/05/03 职场文书
小学教师工作总结2015
2015/04/07 职场文书
运动员代表致辞
2015/07/29 职场文书