微信小程序 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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
对采用动态原型方式无法展示继承机制得思考
Dec 04 Javascript
jquery 防止表单重复提交代码
Jan 21 Javascript
js调用activeX获取u盘序列号的代码
Nov 21 Javascript
基于jquery的固定表头和列头的代码
May 03 Javascript
javascript获取作用在元素上面的样式属性代码
Sep 20 Javascript
Node.js中的缓冲与流模块详细介绍
Feb 11 Javascript
javascript实现可全选、反选及删除表格的方法
May 15 Javascript
深入理解Angular2 模板语法
Aug 07 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
深入Vue-Router路由嵌套理解
Aug 13 Javascript
Node.js API详解之 util模块用法实例分析
May 09 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
php实现的简单检验登陆类
2015/06/18 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
读jQuery之三(构建选择器)
2011/06/11 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python梯度下降法的简单示例
2018/08/31 Python
TensorFlow实现模型评估
2018/09/07 Python
python实现反转部分单向链表
2018/09/27 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
英国自行车商店:AW Cycles
2021/02/24 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
社区工作者先进事迹
2014/01/18 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
出生医学证明书
2014/09/15 职场文书
2014年维稳工作总结
2014/11/18 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
户外拓展训练感想
2015/08/07 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers