微信小程序 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 相关文章推荐
用js实现键盘方向键翻页功能的代码
Jun 03 Javascript
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
Nov 14 Javascript
JQuery打造省市下拉框联动效果
May 18 Javascript
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
使用Web Uploader实现多文件上传
Jun 08 Javascript
JS控制层作圆周运动的方法
Jun 20 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
Oct 26 Javascript
利用Javascript实现一套自定义事件机制
Dec 14 Javascript
react-native-video实现视频全屏播放的方法
Mar 19 Javascript
jQuery简单实现根据日期计算星期几的方法
Jan 09 jQuery
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 zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
php 冒泡排序 交换排序法
2011/05/10 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
实例讲解php数据访问
2016/05/09 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
Python实现正整数分解质因数操作示例
2018/08/01 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
行政部主管岗位职责
2013/12/28 职场文书
三查三看党性分析材料
2014/02/18 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
员工手册编写范本
2015/05/14 职场文书
python中的装饰器该如何使用
2021/06/18 Python