详解如何用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中文字镂空、透明值、阴影效果设置示例小结
Mar 07 HTML / CSS
利用CSS3的定位页面元素
Aug 29 HTML / CSS
利用SVG和CSS3来实现一个炫酷的边框动画
Jul 22 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
Apr 21 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
Nov 17 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
Jan 08 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
Jan 17 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
May 13 HTML / CSS
HTML5新特性之type=file文件上传功能
Feb 02 HTML / CSS
浅谈Html5页面打开app的一些思考
Mar 30 HTML / CSS
DIV CSS实现网页背景半透明效果
Dec 06 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
pycharm 使用心得(三)Hello world!
2014/06/05 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
python如何设置静态变量
2020/09/07 Python
Pycharm Git 设置方法
2020/09/15 Python
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
业务员薪酬管理制度
2014/01/15 职场文书
大学生军训广播稿
2014/01/24 职场文书
项目投资意向书
2014/04/01 职场文书
毕业设计致谢语
2015/05/14 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA