微信小程序 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学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
js遍历td tr等html元素
Dec 13 Javascript
JS、jQuery中select的用法详解
Apr 21 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
JS实战篇之收缩菜单表单布局
Dec 10 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
详解Angular 4.x Injector
May 04 Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
详解js实时获取并显示当前时间的方法
May 10 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 Javascript
React实现动效弹窗组件
Jun 21 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 strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
js 文件引入实现代码
2010/04/23 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
python定时执行指定函数的方法
2015/05/27 Python
python显示生日是星期几的方法
2015/05/27 Python
python实现AES加密和解密
2019/03/27 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
七一慰问简报
2015/07/20 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
MySQL数据库查询之多表查询总结
2022/08/05 MySQL
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技