利用面向对象思想封装Konva动态进度条
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动态进度条的更多相关文章
- bootstrap得动态进度条
Bootstrap的动态进度条: html: 创建一个modal 这里使用fade先将modal隐藏起来,然后modal里面嵌入progress 代码很简单 <div class=" ...
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- Qt实现炫酷启动图-动态进度条
目录 一.简述 二.动效进度条 1.光效进度条 2.延迟到达进度条 3.接口说明 三.启动图 1.实现思路 2.背景图切换 四.测试 1.构造启动图 2.背景图 3.其他信息 4.事件循环 五.源码 ...
- 超简单CSS3水平动态进度条+小圆球+背景色渐变
实现的的效果图如下:效果是动态加载的 代码如下: <!DOCTYPE html> <html lang="en"> <head> <met ...
- 使用Konva创建进度条
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- bootstrap与jQuery结合的动态进度条
此款进度条实现的功能: 1.利用了bootstrap的进度条组件. a.在最外层的<div>中加入class .progress,在里层<div>加入class .progre ...
- Vue实现mp3音乐播放及动态进度条
今天碰到一个Vue点击mp3播放及进度条动态走动的小功能,记录一下: 首先是通过HTML5 audio标签引入音频: <template> <div class="x-fo ...
- 使用面向对象思想封装js(附实例)
平时在写js时应该用面向对象思想将每一组功能封装成一个模块,可实现模块间的高内聚低耦合.重用.结构清晰........... 如果页面中逻辑复杂.功能多,不使用模块封装是不可想象的,维护起来非常复杂. ...
- 利用CoreAnimation实现一个时间的进度条
(个人原创,转载请注明出处 http://www.cnblogs.com/pretty-guy/p/7460334.html) 在iOS中实现进度条通常都是通过不停的设置progress来完成的,这样 ...
随机推荐
- Maven的settings.xml文件结构之mirrors
Maven的远程库提供大量构件,供Maven项目直接下载使用.对于一个Maven项目,如果没有特别声明,默认使用Maven的central库,url如下: http://repo.maven.apac ...
- 解决 jersey 单jar包 IME media type text/plain was not found.
1.maven-assembly-plugin 换成 --> maven-shade-plugin <plugins> <!-- shade插件打包成jar包 --> ...
- ubuntu移植jsoncpp到Android平台(转)
NDK开发模块的时候,如果涉及到网络请求,类似json数据传递的时候,有现成的第三方json库可以移植,后台C++开发中使用的比较多的是jsoncpp,今天记录一下jsoncpp移植到Android平 ...
- Android进程注入
全部代码在这里下载:http://download.csdn.net/detail/a345017062/8133239 里面有两个exe.inj是一个C层进程注入的样例.inj_dalvik是我写的 ...
- python之函数用法__setattr__
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法__setattr__ #http://www.cnblogs.com/hongfei ...
- JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代
内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...
- Android WiFi开发
概述 介绍Android WiFi的扫描.连接.信息.以及WiFi热点等等的实现,并用代码实现. 详细 代码下载:http://www.demodashi.com/demo/10660.html 一. ...
- TaskController.java 20160712
package main.java.com.zte.controller.system; import java.io.PrintWriter; import java.util.ArrayList; ...
- 工具-Memcahce和Redis比较
一.Memcache 1. memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小redis有部份存在硬盘上,这样能保证数据的持久性. 2. Memcache ...
- inet_ntoa 的一个小问题
一个简单点的阻塞式tcp服务器如下所示: #include <stdio.h> #include <string.h> #include <sys/socket.h> ...