微信小程序 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 相关文章推荐
ImageFlow可鼠标控制图片滚动
Jan 30 Javascript
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
js获取form的方法
May 06 Javascript
js鼠标点击图片切换效果实现代码
Nov 19 Javascript
JavaScript中的对象和原型(一)
Aug 12 Javascript
jQuery中$.ajax()方法参数解析
Oct 22 Javascript
Angular2 多级注入器详解及实例
Oct 30 Javascript
Javascript实现base64的加密解密方法示例
Jun 27 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
Aug 24 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
Sep 04 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 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 常用类汇总 推荐收藏
2010/05/13 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
Gird事件机制初级读本
2007/03/10 Javascript
JavaScript中的Document文档对象
2008/01/16 Javascript
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
async/await地狱该如何避免详解
2018/05/10 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
python 发送get请求接口详解
2020/11/17 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
Shell编程面试题
2012/05/30 面试题
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android