微信小程序 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应该怎样学
Apr 16 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
Jan 27 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
在myeclipse中如何加入jquery代码提示功能
Jun 03 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
Sep 18 Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
vuex 动态注册方法 registerModule的实现
Jul 03 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
微信小程序 video组件详解
2016/10/25 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
python 正则式使用心得
2009/05/07 Python
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
Python lambda表达式用法实例分析
2018/12/25 Python
Flask框架 CSRF 保护实现方法详解
2019/10/30 Python
Python 中@property的用法详解
2020/01/15 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
国贸专业个人求职信分享
2013/12/04 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
十周年庆典策划方案
2014/06/03 职场文书
食堂标语大全
2014/06/11 职场文书
安全演讲稿开场白
2014/08/25 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
教育合作协议范本
2014/10/17 职场文书
生产现场禁烟通知
2015/04/23 职场文书
电影红河谷观后感
2015/06/11 职场文书