微信小程序 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 相关文章推荐
javascript编程起步(第六课)
Feb 27 Javascript
ajax请求乱码的解决方法(中文乱码)
Apr 10 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
JS实现刷新父页面不弹出提示框的方法
Jun 22 Javascript
require.js配合插件text.js实现最简单的单页应用程序
Jul 12 Javascript
浅谈vue.js中v-for循环渲染
Jul 26 Javascript
webpack4简单入门实例
Sep 06 Javascript
默认浏览器设置及vue自动打开页面的方法
Sep 21 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 Javascript
JS实现简单tab选项卡切换
Oct 25 Javascript
html5调用摄像头截图功能
Jan 18 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 ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
深入理解js中this的用法
2016/05/28 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
微信小程序之左右布局的实现代码
2019/12/13 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
js面向对象方式实现拖拽效果
2021/03/03 Javascript
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
使用tensorflow实现线性svm
2018/09/07 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python游戏地图最短路径求解
2019/01/16 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
Django密码系统实现过程详解
2019/07/19 Python
python实现的汉诺塔算法示例
2019/10/23 Python
python标准库OS模块详解
2020/03/10 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
会计专业自我鉴定范文
2013/10/06 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
高三复习计划
2015/01/19 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
如何用python反转图片,视频
2021/04/24 Python
Python数组变形的几种实现方法
2022/05/30 Python