angularJS结合canvas画图例子


Posted in Javascript onFebruary 09, 2015

这里给大家分享一个angularJS结合canvas画图例子,效果非常不错,赞一个先。

<!DOCTYPE html>

<html ng-app="APP">

<head>

    <meta charset="UTF-8">

  <script src="http://cdn.bootcss.com/angular.js/1.3.0-beta.12/angular.min.js"></script>

</head>

<body ng-controller="MainCtrl">

  <!--

    界面的这个元素会被替换成canvas元素;

  -->

    <div ang:round:progress data-round-progress-model="roundProgressData"></div>

    <br>

    <input type="number" ng-model="roundProgressData.label"/>

    <script>

                                   //引用angular.directives-round-progress这个模块;

     var APP = angular.module('APP', ['angular.directives-round-progress']).

     controller('MainCtrl', function($scope) {

        $scope.roundProgressData = {

          //这个是初始化的数据;

          label: 11,

          percentage: 0.11

        }

        //通过监听scope下的这个roundProgressData属性, 对界面的canvas进行重绘;

        $scope.$watch('roundProgressData', function (newValue) {

          newValue.percentage = newValue.label / 100;

        }, true);

      });

    </script>

<script>

    /*!

 * AngularJS Round Progress Directive

 *

 * Copyright 2013 Stephane Begaudeau

 * Released under the MIT license

 */

angular.module('angular.directives-round-progress', []).directive('angRoundProgress', [function () {

  var compilationFunction = function (templateElement, templateAttributes, transclude) {

    if (templateElement.length === 1) {

      //初始化DOM模型, 包括初始化canvas等;

      var node = templateElement[0];

      var width = node.getAttribute('data-round-progress-width') || '400';

      var height = node.getAttribute('data-round-progress-height') || '400';

      var canvas = document.createElement('canvas');

      canvas.setAttribute('width', width);

      canvas.setAttribute('height', height);

      canvas.setAttribute('data-round-progress-model', node.getAttribute('data-round-progress-model'));

        //相当于demo, 替换原来的元素;

      node.parentNode.replaceChild(canvas, node);

        //各种配置;

      var outerCircleWidth = node.getAttribute('data-round-progress-outer-circle-width') || '20';

      var innerCircleWidth = node.getAttribute('data-round-progress-inner-circle-width') || '5';

      var outerCircleBackgroundColor = node.getAttribute('data-round-progress-outer-circle-background-color') || '#505769';

      var outerCircleForegroundColor = node.getAttribute('data-round-progress-outer-circle-foreground-color') || '#12eeb9';

      var innerCircleColor = node.getAttribute('data-round-progress-inner-circle-color') || '#505769';

      var labelColor = node.getAttribute('data-round-progress-label-color') || '#12eeb9';

      var outerCircleRadius = node.getAttribute('data-round-progress-outer-circle-radius') || '100';

      var innerCircleRadius = node.getAttribute('data-round-progress-inner-circle-radius') || '70';

      var labelFont = node.getAttribute('data-round-progress-label-font') || '50pt Calibri';

      return {

        pre: function preLink(scope, instanceElement, instanceAttributes, controller) {

          var expression = canvas.getAttribute('data-round-progress-model');

            //监听模型, O了

            //就监听一个属性;

          scope.$watch(expression, function (newValue, oldValue) {

            // Create the content of the canvas

            //包括新建和重绘;

            var ctx = canvas.getContext('2d');

            ctx.clearRect(0, 0, width, height);

            // The "background" circle

            var x = width / 2;

            var y = height / 2;

            ctx.beginPath();

            ctx.arc(x, y, parseInt(outerCircleRadius), 0, Math.PI * 2, false);

            ctx.lineWidth = parseInt(outerCircleWidth);

            ctx.strokeStyle = outerCircleBackgroundColor;

            ctx.stroke();

            // The inner circle

            ctx.beginPath();

            ctx.arc(x, y, parseInt(innerCircleRadius), 0, Math.PI * 2, false);

            ctx.lineWidth = parseInt(innerCircleWidth);

            ctx.strokeStyle = innerCircleColor;

            ctx.stroke();

            // The inner number

            ctx.font = labelFont;

            ctx.textAlign = 'center';

            ctx.textBaseline = 'middle';

            ctx.fillStyle = labelColor;

            ctx.fillText(newValue.label, x, y);

            // The "foreground" circle

            var startAngle = - (Math.PI / 2);

            var endAngle = ((Math.PI * 2 ) * newValue.percentage) - (Math.PI / 2);

            var anticlockwise = false;

            ctx.beginPath();

            ctx.arc(x, y, parseInt(outerCircleRadius), startAngle, endAngle, anticlockwise);

            ctx.lineWidth = parseInt(outerCircleWidth);

            ctx.strokeStyle = outerCircleForegroundColor;

            ctx.stroke();

          }, true);

        },

        post: function postLink(scope, instanceElement, instanceAttributes, controller) {}

      };

    }

  };

  var roundProgress = {

      //compile里面先对dom进行操作, 再对$socpe进行监听;

    compile: compilationFunction,

    replace: true

  };

  return roundProgress;

}]);

</script>

</body>

</html>

以上就是angularJS结合canvas画图例子的全部代码了,希望大家能够喜欢。

Javascript 相关文章推荐
java script编程起步(第三课)
Jan 10 Javascript
使用正则替换变量
May 05 Javascript
javascript 简单抽屉效果的实现代码
Mar 09 Javascript
js中的cookie的读写操作示例详解
Apr 17 Javascript
一个简单的全屏图片上下打开显示网页效果示例
Jul 08 Javascript
js实现不提交表单获取单选按钮值的方法
Aug 21 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
javascript 中的try catch应用总结
Apr 01 Javascript
详解Vue 非父子组件通信方法(非Vuex)
May 24 Javascript
js实现拖拽上传图片功能
Aug 01 Javascript
详解基于node的前端项目编译时内存溢出问题
Aug 01 Javascript
JavaScript实现的联动菜单特效示例
Jul 08 Javascript
jquery实现上下左右滑动的方法
Feb 09 #Javascript
js实现上传图片预览的方法
Feb 09 #Javascript
js实现ifram取父窗口URL地址的方法
Feb 09 #Javascript
jquery实现相册一下滑动两次的方法
Feb 09 #Javascript
js点击选择文本的方法
Feb 09 #Javascript
JS动态加载当前时间的方法
Feb 09 #Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 #Javascript
You might like
PHP strtr() 函数使用说明
2008/11/21 PHP
PHP动态创建Web站点的方法
2011/08/14 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
清空上传控件input file的值
2010/07/03 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
python装饰器使用方法实例
2013/11/21 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python常用库推荐
2016/12/04 Python
如何用Python合并lmdb文件
2018/07/02 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
老人祝寿主持词
2014/03/28 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
2014年班务工作总结
2014/12/02 职场文书
唐山大地震的观后感
2015/06/05 职场文书
初一年级组工作总结
2015/08/12 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python