微信小程序 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 相关文章推荐
易操作的jQuery表单提示插件
Dec 01 Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 Javascript
使用jquery给指定的table动态添加一行、删除一行
Oct 13 Javascript
微信小程序 教程之引用
Oct 18 Javascript
getElementById().innerHTML与getElementById().value的区别
Oct 27 Javascript
JS调用打印机功能简单示例
Nov 28 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
Aug 19 Javascript
浅谈js闭包理解
Apr 01 Javascript
JavaScript多种滤镜算法实现代码实例
Dec 10 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
Jul 28 Javascript
OpenLayers3实现地图显示功能
Sep 25 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/11/24 PHP
php DES加密算法实例分析
2019/09/18 PHP
基于jQuery试卷自动排版系统
2010/07/18 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Python 统计字数的思路详解
2018/05/08 Python
简单了解Python生成器是什么
2019/07/02 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
Python是如何进行类型转换的
2013/06/09 面试题
2014年情人节活动方案
2014/02/16 职场文书
学校招生宣传广告词
2014/03/19 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
离职信范本
2015/06/23 职场文书
八年级历史教学反思
2016/02/19 职场文书
创业计划书之甜品店
2019/09/18 职场文书
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle