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 相关文章推荐
表单(FORM)的一些实用效果代码
Mar 25 Javascript
Add a Table to a Word Document
Jun 15 Javascript
用JTrackBar实现的模拟苹果风格的滚动条
Aug 06 Javascript
JavaScript 三种不同位置代码的写法
Oct 25 Javascript
javascript 防止刷新,后退,关闭
Aug 07 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
一个简单的jQuery计算器实现了连续计算功能
Jul 21 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
Mar 04 Javascript
解决vue中修改了数据但视图无法更新的情况
Aug 27 Javascript
JavaScript遍历数组和对象的元素简单操作示例
Jul 09 Javascript
Python版实现微信公众号扫码登陆
May 28 Javascript
javascript代码实现简易计算器
Jan 25 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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
js中生成map对象的方法
2014/01/09 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
原生js实现日历效果
2020/03/02 Javascript
Python六大开源框架对比
2015/10/19 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
vscode调试django项目的方法
2020/08/06 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
大学生个人简历中的自我评价
2013/12/27 职场文书
小学生考试获奖感言
2014/01/30 职场文书
2014年创卫实施方案
2014/02/18 职场文书
啤酒节策划方案
2014/05/28 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
人事代理委托书
2014/09/27 职场文书
董事长助理岗位职责
2015/02/11 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
贷款担保书范本
2015/09/22 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL