微信小程序 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 相关文章推荐
node.js中的console.time方法使用说明
Dec 09 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
Oct 16 Javascript
使用jQuery监听DOM元素大小变化
Feb 24 Javascript
jQuery+formdata实现上传进度特效遇到的问题
Feb 24 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
Dec 26 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
详解.vue文件解析的实现
Jun 11 Javascript
微信小程序获取地理位置及经纬度授权代码实例
Sep 18 Javascript
JavaScript中的函数式编程详解
Aug 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 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
jQuery EasyUI API 中文文档 - Panel面板
2011/09/30 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
微信小程序开发探究
2016/12/27 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
python实现多线程采集的2个代码例子
2014/07/07 Python
Python fileinput模块使用实例
2015/05/28 Python
Python随机函数random()使用方法小结
2018/04/29 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
请解释接口的显式实现有什么意义
2012/05/26 面试题
学生实习推荐信范文
2013/11/26 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
太太口服液广告词
2014/03/20 职场文书
机关职员工作检讨书
2014/10/23 职场文书
2014年基建工作总结
2014/12/12 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python