1.html代码:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>02面向对象版本的进度条</title>
<style>
body {
padding: 0;
margin: 0;
background-color: #f0f0f0;
overflow: hidden;
}
</style>
<script src="konva.js"></script>
<script src="progressBar.js"></script>
</head>
<body>
<div id="container">
</div>
<script>
//创建舞台
var stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,//全屏
height: window.innerHeight
});
//创建层
var layer = new Konva.Layer();
stage.add(layer);
//中心点坐标
var cenX = stage.width() / 2;
var cenY = stage.height() / 2;
var option = {//把参数设置成对象形式;
x: 1/8 * stage.width(), //进度条x坐标
y: 1/2 * stage.height(), //进度条y坐标
w: 3/4 * stage.width(), //进度条的宽度
h: 1/12 * stage.height(), //进度条的高度
fillStyle: 'red', //进度条内部矩形的填充的颜色
strokeStyle: 'blue' //进度条的外边框的颜色
};
// 创建进度条对象实例;在new的时候调用初始化值;
var p = new ProgressBar( option );
//把进度条放到 层中
p.addToGroupOrLayer( layer );
//渲染层
layer.draw();
p.changeValue( .5 );
</script>
</body>
</html>

2.js代码:

 function ProgressBar( option ) {
//new 构造函数执行的时候,调用 内部的初始化方法。
this._init( option );
} ProgressBar.prototype = {
//类初始化的时候:创建内部矩形, 外部矩形,然后把两个矩放到goroup里面去。
_init: function( option ) {
this.x = option.x || 0; //进度条的x坐标
this.y = option.y || 0; // 进度条的y坐标
this.w = option.w || 0; //进度条的宽度
this.h = option.h || 0; //进度条的高度 this.fillStyle = option.fillStyle || 'red';
this.strokeStyle = option.strokeStyle || 'red'; //定义的内部的进度条的矩形
var innerRect = new Konva.Rect({
x: this.x, // stage.width(),获得舞台的宽度, x:设置当前矩形x坐标
y: this.y,
width: 0, //设置矩形的宽度
height: this.h, //设置矩形的高度
fill: this.fillStyle, //设置矩形的填充的颜色
cornerRadius: 1/2 * this.h, //设置进度条的圆角。
id: 'innerRect', //设置当前矩形的ID,以便于后面进行使用ID选择器
name: 'ss' //设置name,方便后面用类选择器。
}); this.innerRect = innerRect; //添加一个外边框的 矩形
var outerRect = new Konva.Rect({
x: this.x, // stage.width(),获得舞台的宽度, x:设置当前矩形x坐标
y: this.y,
width: this.w, //设置矩形的宽度
height: this.h, //设置矩形的高度形的高度
stroke: this.strokeStyle, // 设置了stroke那么,矩形就进行描边
strokeWidth: 4, // 设置边框的宽度,
cornerRadius: 1/2* this.h,
}); //html :
// 创建一个组, 相当于html中的父盒子。把其他两个盒子包在里面;当给其设置坐标时,相当于进行绝对定位,这时候的子盒子是跟着父盒子进行定位的;
this.group = new Konva.Group({
x: 0,
y: 0
});
this.group.add( innerRect );//把内部的矩形放到组中
this.group.add( outerRect );
},
//此方法是将 用户传进来的需要改变的进度 运行动画
changeValue: function( val ) {
//传进来的进度
if( val > 1 ) { // 1 - 100 vs 0 -1 =>0.5
val = val /100;
}
//做动画 val = .3 .7
var width = this.w * val; //最终进度条内部矩形的 宽度。 // 通过id选择器去查找内部的子元素。
var innerRect = this.group.findOne('#innerRect');
// var innerRect = this.group.findOne('Rect'); var innerRect = this.innerRect; // to动画系统: 让我们的物件 变换到某个状态
// 让我们的 物件从 当前状态 到 下面设置的状态,
innerRect.to({
width: width,
duration: .3,
easing: Konva.Easings.EasIn
}); },
// arg: 传进来的层或者 是组,
//此方法是:把当前创建的进度条 添加到 层中。
addToGroupOrLayer: function( layer ) {
layer.add( this.group );
}
}

利用面向对象思想封装Konva动态进度条的更多相关文章

  1. bootstrap得动态进度条

    Bootstrap的动态进度条: html: 创建一个modal   这里使用fade先将modal隐藏起来,然后modal里面嵌入progress 代码很简单 <div class=" ...

  2. 原生JS面向对象思想封装轮播图组件

    原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...

  3. Qt实现炫酷启动图-动态进度条

    目录 一.简述 二.动效进度条 1.光效进度条 2.延迟到达进度条 3.接口说明 三.启动图 1.实现思路 2.背景图切换 四.测试 1.构造启动图 2.背景图 3.其他信息 4.事件循环 五.源码 ...

  4. 超简单CSS3水平动态进度条+小圆球+背景色渐变

    实现的的效果图如下:效果是动态加载的 代码如下: <!DOCTYPE html> <html lang="en"> <head> <met ...

  5. 使用Konva创建进度条

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. bootstrap与jQuery结合的动态进度条

    此款进度条实现的功能: 1.利用了bootstrap的进度条组件. a.在最外层的<div>中加入class .progress,在里层<div>加入class .progre ...

  7. Vue实现mp3音乐播放及动态进度条

    今天碰到一个Vue点击mp3播放及进度条动态走动的小功能,记录一下: 首先是通过HTML5 audio标签引入音频: <template> <div class="x-fo ...

  8. 使用面向对象思想封装js(附实例)

    平时在写js时应该用面向对象思想将每一组功能封装成一个模块,可实现模块间的高内聚低耦合.重用.结构清晰........... 如果页面中逻辑复杂.功能多,不使用模块封装是不可想象的,维护起来非常复杂. ...

  9. 利用CoreAnimation实现一个时间的进度条

    (个人原创,转载请注明出处 http://www.cnblogs.com/pretty-guy/p/7460334.html) 在iOS中实现进度条通常都是通过不停的设置progress来完成的,这样 ...

随机推荐

  1. STS 设置 注解提示

    1.window -> Preferences

  2. HTTP协议详解之响应篇

    #xiaodeng #状态码 #HTTP权威指南 62 #http响应由3部分组成:状态行.消息报头.响应正文.HTTP-Version Status-Code Reason-Phrase CRLF# ...

  3. iOS蓝牙BLE4.0通信功能

    概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...

  4. ORACLE经常使用命令

    1 怎样查看数据库中都有什么表? select * from sys.user_tables; 2 怎样链接数据库 sqlplus /nolog;conn sys/oracle as sysdba; ...

  5. iOS 直播推流 - 搭建基于RTMP的本地Nginx服务器

    前端时间,公司要调研直播相关的内容,特地花时间进行了一番调研. 本篇将记录其中的推流篇-本地推理播放测试. 关于Nginx: 配置Nginx以支持HLS.RTMP的推流与拉流,iOS系统使用LFLiv ...

  6. HDUOJ--Bone Collector

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. NYOJ----次方求模

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...

  8. ios NSURLSession使用说明及后台工作流程分析

    NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意, ...

  9. 【LeetCode】31. Next Permutation (2 solutions)

    Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...

  10. 【LeetCode】64. Minimum Path Sum

    Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to b ...