效果:

Circle.js

/*
1、 封装属性: x, y r, fillStyle strokeStyle opacity
2、render
*/
function Circle(option) {
this._init(option);
}
Circle.prototype = {
_init : function (option) {
this.x = option.x || 0; //x ,y 坐标
this.y = option.y || 0;
this.r = option.r || 0; // 圆的半径
// 设置圆形的透明度
this.opacity = option.opacity === 0 ? 0 : option.opacity || 1;
this.strokeStyle = option.strokeStyle || 'red';//划线颜色
this.fillStyle = option.fillStyle || 'blue';//填充颜色
},
render : function (ctx) {
ctx.save();// 把当前的上下文的状态保存一下
ctx.beginPath();//开始一个新的路径
ctx.translate(this.x, this.y); //把整个画布进行位移,让图片以新画布原点为原点
ctx.globalAlpha = this.opacity;//设置透明度
//给 ctx规划一个路径。注意:规划的路径会一直保存。所以
//最好在每次绘制圆形的时候beginPath一下标志一个新的路径。
ctx.arc(this.x,this.y,this.r,0,360);
ctx.fillStyle = this.fillStyle;
ctx.fill(); ctx.strokeStyle = this.strokeStyle;
ctx.stroke();
ctx.restore();//还原绘制的状态
}
}

index,html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>面向对象版本的圆形</title>
<script src="js/Circle.js"></script>
</head>
<body> <div id="container">
<canvas id="cavsElem1">
你的浏览器不支持canvas,请升级浏览器
</canvas> <canvas id="cavsElem2">
你的浏览器不支持canvas,请升级浏览器
</canvas>
</div>
<img src="" id="imgId" alt="">
<script>
(function(){
var canvas1 = document.querySelector( '#cavsElem1' );
var canvas2 = document.querySelector( '#cavsElem2' );
var ctx1 = canvas1.getContext( '2d' );
var ctx2 = canvas2.getContext( '2d' ); canvas1.width = 600;
canvas1.height = 600;
canvas1.style.border = "1px solid #000"; canvas2.width = 600;
canvas2.height = 600;
canvas2.style.border = "1px solid #000"; //创建圆形
var circle = new Circle({
x:100,
y:100,
r:30,
opacity:.6,
fillStyle: 'purple', //填充的样式
strokeStyle: 'yellow'
}); //渲染圆形
circle.render(ctx1); setInterval(function() {
ctx1.clearRect( 0, 0 , canvas1.width, canvas1.height);
circle.x+=10;
circle.render(ctx1);
ctx2.drawImage(canvas1, 0, 0);
}, 100) }());
</script>
</body>
</html>

canvas+js+面向对象的圆形封装的更多相关文章

  1. canvas+js+面向对象的矩形封装

    效果: Rect.js /* 1. 封装属性: x, y w , h, fillStyle strokeStyle rotation opacity 2.render */ function Rect ...

  2. 前端js面向对象编程以及封装组件的思想

    demo-richbase 用来演示怎么使用richbase来制作组件的例子 作为一名前端工程师,写组件的能力至关重要.虽然javascript经常被人嘲笑是个小玩具,但是在一代代大牛的前仆后继的努力 ...

  3. 关于前端js面向对象编程以及封装组件的思想

    demo-richbase 用来演示怎么使用richbase来制作组件的例子 作为一名前端工程师,写组件的能力至关重要.虽然javascript经常被人嘲笑是个小玩具,但是在一代代大牛的前仆后继的努力 ...

  4. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  5. 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

    接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...

  6. JS面向对象(封装,继承)

    在六月份找工作中,被问的最多的问题就是: js面向对象,继承,封装,原型链这些,你了解多少? 额,,,我怎么回答呢, 只能说,了解一些,不多不少,哈哈哈哈,当然,这是玩笑话. 不过之前学过java,来 ...

  7. 用js面向对象思想封装插件

    js是基于原型的面向对象语言,如果你学过java,c#等正统面向对象语言,你会难以理解js的面向对象,他和普通的面向对象不太一样,今天,我们通过封装一个toast插件,来看看js面向对象是如何运行的. ...

  8. canvas+js绘制序列帧动画+面向对象

    效果: 素材: 源码:(一般的绘制方式) <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  9. 实例了解js面向对象的封装和继承等特点

    1.面向对象特点 相比之前按照过程式写法,面向对象有以下几个特点; 1.抽象:抓住核心问题,就是将很多个方法放在一个对象上.对象由属性和方法组成,属性就是我们定义的变量,它是静态的:方法就是行为操作, ...

随机推荐

  1. NOSQL之Redis、MongDB、Habase、Cassandra的介绍与比较

    一.Redis介绍     1.1Redis优点 (1)Redis拥有非常丰富的数据结构: (2)Redis提供事务的功能,可以保证一串命令的原子性,中间不会被任何打断. (3)数据存储在内存中,读写 ...

  2. Java JarFile 解析

    Java JarFile 解析 package com.github.binarylei; import java.io.*; import java.net.URL; import java.net ...

  3. 谈谈WhatsApp一年设计经历和收获

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   关于WhatApp和Facebook如何实现规模设计的思考 我已经在Facebook担任产品经理 ...

  4. c++沉思录中 对字符串进行围边 横向连接 竖向连接操作的练习

    // MyPics.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string> #include < ...

  5. Python 关于数组矩阵变换函数numpy.nonzero(),numpy.multiply()用法

    1.numpy.nonzero(condition),返回参数condition(为数组或者矩阵)中非0元素的索引所形成的ndarray数组,同时也可以返回condition中布尔值为True的值索引 ...

  6. CodeForces 518B Tanya and Postcard (题意,水题)

    题意:给定两个字符串,然后从第二个中找和第一个相同的,如果大小写相同,那么就是YAY,如果大小写不同,那就是WHOOPS.YAY要尽量多,其次WHOOPS也要尽量多. 析:这个题并不难,难在读题懂题意 ...

  7. SOA和微服务到底是什么关系?

    SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式.我倒觉得微服务其实就是随着互联网的发展,复杂的平台.业务的出现, ...

  8. 使用electron-packager electron-builder electron-updater 打包vue项目,支持在线更新

    1.如何用electron-packager electron-builder打包vue项目,打包成桌面程序. 步骤一. 执行npm run build 打包你的vue项目. 打包成功后,生成dist ...

  9. (二分搜索 数论)(求阶乘里零个数对应的阶乘)light oj -- 1138

    链接 Description You task is to find minimal natural number N, so that N! contains exactly Q zeroes on ...

  10. handsontable-developer guide-setting options,callback

    1.cell数组 cell: [ {row: 0, col: 0, readOnly: true} ] 2.cells函数 cells: function(row, col, prop){ var c ...