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 相关文章推荐
JavaScript 拾漏补遗
Dec 27 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
Javascript中引用示例介绍
Feb 21 Javascript
JS应用正则表达式转换大小写示例
Sep 18 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
ECMAScript 5中的属性描述符详解
Mar 02 Javascript
微信小程序 Audio API详解及实例代码
Sep 30 Javascript
js实现文字跑马灯效果
Feb 23 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
JS简单生成随机数(随机密码)的方法
May 11 Javascript
JS验证码实现代码
Sep 14 Javascript
怎样在vue项目下添加ESLint的方法
May 16 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设计模式 Observer(观察者模式)
2011/06/26 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
详解Vue2.x-directive的学习笔记
2017/07/17 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
Python3.6简单反射操作示例
2018/06/14 Python
详解如何设置Python环境变量?
2019/05/13 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
python类的实例化问题解决
2019/08/31 Python
Python实现图片识别加翻译功能
2019/12/26 Python
np.dot()函数的用法详解
2020/01/17 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
幼儿教师师德演讲稿
2014/05/06 职场文书
婚宴父亲致辞
2015/07/27 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
php实例化对象的实例方法
2021/11/17 PHP