微信小程序 Canvas增强组件实例详解及源码分享


Posted in Javascript onJanuary 04, 2017

WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender。

微信小程序 Canvas增强组件实例详解及源码分享

使用

WXML:

<canvas style="width: 375px; height: 600px;" canvas-id="line-canvas-1">canvas>

JS:

var wezrender = require('../../lib/wezrender');

  zr = wezrender.zrender.init("line-canvas-1", 375, 600);

特性

数据驱动

利用WeZRender绘图,只需定义图形数据。

var circle = new wezrender.graphic.shape.Circle(   
    shape: {
      cx: 50,
      cy: 50,
      r: 50
    },
    style: {
      fill: 'red',
      lineWidth: 10
    }
  });

丰富的图形选项

内置多种图形元素(圆形、椭圆、圆环、扇形、矩形、多边形、直线、曲线、心形、水滴、玫瑰线、Trochoid、文字、图片等),统一且丰富的图形属性充分满足个性化需求。

var droplet = new wezrender.graphic.shape.Droplet({
    shape: {
      cx: 200,
      cy: 300,
      width: 50,
      height: 50
    },
    style: {
        fill: '#ff9999'
    }
  });

强大的动画支持

提供promise式的动画接口和常用缓动函数,轻松实现各种动画需求。

var image = new wezrender.graphic.Image({
    style: {
      x: 0,
      y: 0,
      image: '../../images/koala.jpg',
      width: 32,
      height: 24,
      text: 'koala'
    }
  });
  zr.add(image);

  image.animateStyle(true)
    .when(2000, {
      x: 350,
      y: 450,
      width: 360,
      height: 270,
    })
    .start();

易于扩展

分而治之的图形定义策略允许扩展图形元素。

var Pin = wezrender.graphic.Path.extend({
    type: 'pin',
    shape: {
      // x, y on the cusp
      x: 0,
      y: 0,
      width: 0,
      height: 0
    },
    buildPath: function (path, shape) {
      var x = shape.x;
      var y = shape.y;
      var w = shape.width / 5 * 3;
      // Height must be larger than width
      var h = Math.max(w, shape.height);
      var r = w / 2;

      // Dist on y with tangent point and circle center
      var dy = r * r / (h - r);
      var cy = y - h + r + dy;
      var angle = Math.asin(dy / r);
      // Dist on x with tangent point and circle center
      var dx = Math.cos(angle) * r;

      var tanX = Math.sin(angle);
      var tanY = Math.cos(angle);

      path.arc(
        x, cy, r,
        Math.PI - angle,
        Math.PI * 2 + angle
      );

      var cpLen = r * 0.6;
      var cpLen2 = r * 0.7;
      path.bezierCurveTo(
        x + dx - tanX * cpLen, cy + dy + tanY * cpLen,
        x, y - cpLen2,
        x, y
      );
      path.bezierCurveTo(
        x, y - cpLen2,
        x - dx + tanX * cpLen, cy + dy + tanY * cpLen,
        x - dx, cy + dy
      );
      path.closePath();
    }
  });

开源协议

本项目依据MIT开源协议发布,允许任何组织和个人免费使用。

项目地址

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
不错的asp中显示新闻的功能
Oct 13 Javascript
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
Javascript 面向对象(二)封装代码
May 23 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
Mar 27 Javascript
浅谈jQuery中setInterval()方法
Jul 07 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
如何使用AngularJs打造权限管理系统【简易型】
May 09 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
Mar 03 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
Jun 12 Javascript
vue实现tab栏点击高亮效果
Aug 19 Javascript
js实现简单图片拖拽效果
Feb 22 Javascript
AngularJS入门示例之Hello World详解
Jan 04 #Javascript
详解AngularJS验证、过滤器、指令
Jan 04 #Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
Jan 04 #Javascript
javascript 注释代码的几种方法总结
Jan 04 #Javascript
JS数组返回去重后数据的方法解析
Jan 03 #Javascript
js实现复选框的全选和取消全选效果
Jan 03 #Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
Jan 03 #Javascript
You might like
php中实现简单的ACL 完结篇
2011/09/07 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python中暂存上传图片的方法
2015/02/18 Python
Python中生成Epoch的方法
2017/04/26 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
北承题目(C++)
2012/05/16 面试题
阳光体育活动总结
2014/04/30 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
满月酒邀请函
2015/01/30 职场文书
后天观后感
2015/06/08 职场文书
入党函调证明材料
2015/06/19 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
导游词之河北野三坡
2019/12/11 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers