Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
x649585723
incubator-echarts
提交
895fce58
I
incubator-echarts
项目概览
x649585723
/
incubator-echarts
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
incubator-echarts
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
895fce58
编写于
12月 26, 2017
作者:
S
sushuang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tweak example.
上级
70f48c50
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
382 addition
and
4 deletion
+382
-4
test/lib/countup.js
test/lib/countup.js
+246
-0
test/lib/rearrange.js
test/lib/rearrange.js
+120
-0
test/scatter-stream-visual.html
test/scatter-stream-visual.html
+16
-4
未找到文件。
test/lib/countup.js
0 → 100644
浏览文件 @
895fce58
/*
countUp.js
by @inorganik
*/
// target = id of html element or var of previously selected html element where counting occurs
// startVal = the value you want to begin at
// endVal = the value you want to arrive at
// decimals = number of decimal places, default 0
// duration = duration of animation in seconds, default 2
// options = optional object of options (see below)
var
CountUp
=
function
(
target
,
startVal
,
endVal
,
decimals
,
duration
,
options
)
{
var
self
=
this
;
self
.
version
=
function
()
{
return
'
1.9.3
'
;
};
// default options
self
.
options
=
{
useEasing
:
true
,
// toggle easing
useGrouping
:
true
,
// 1,000,000 vs 1000000
separator
:
'
,
'
,
// character to use as a separator
decimal
:
'
.
'
,
// character to use as a decimal
easingFn
:
easeOutExpo
,
// optional custom easing function, default is Robert Penner's easeOutExpo
formattingFn
:
formatNumber
,
// optional custom formatting function, default is formatNumber above
prefix
:
''
,
// optional text before the result
suffix
:
''
,
// optional text after the result
numerals
:
[]
// optionally pass an array of custom numerals for 0-9
};
// extend default options with passed options object
if
(
options
&&
typeof
options
===
'
object
'
)
{
for
(
var
key
in
self
.
options
)
{
if
(
options
.
hasOwnProperty
(
key
)
&&
options
[
key
]
!==
null
)
{
self
.
options
[
key
]
=
options
[
key
];
}
}
}
if
(
self
.
options
.
separator
===
''
)
{
self
.
options
.
useGrouping
=
false
;
}
else
{
// ensure the separator is a string (formatNumber assumes this)
self
.
options
.
separator
=
''
+
self
.
options
.
separator
;
}
// make sure requestAnimationFrame and cancelAnimationFrame are defined
// polyfill for browsers without native support
// by Opera engineer Erik Möller
var
lastTime
=
0
;
var
vendors
=
[
'
webkit
'
,
'
moz
'
,
'
ms
'
,
'
o
'
];
for
(
var
x
=
0
;
x
<
vendors
.
length
&&
!
window
.
requestAnimationFrame
;
++
x
)
{
window
.
requestAnimationFrame
=
window
[
vendors
[
x
]
+
'
RequestAnimationFrame
'
];
window
.
cancelAnimationFrame
=
window
[
vendors
[
x
]
+
'
CancelAnimationFrame
'
]
||
window
[
vendors
[
x
]
+
'
CancelRequestAnimationFrame
'
];
}
if
(
!
window
.
requestAnimationFrame
)
{
window
.
requestAnimationFrame
=
function
(
callback
,
element
)
{
var
currTime
=
new
Date
().
getTime
();
var
timeToCall
=
Math
.
max
(
0
,
16
-
(
currTime
-
lastTime
));
var
id
=
window
.
setTimeout
(
function
()
{
callback
(
currTime
+
timeToCall
);
},
timeToCall
);
lastTime
=
currTime
+
timeToCall
;
return
id
;
};
}
if
(
!
window
.
cancelAnimationFrame
)
{
window
.
cancelAnimationFrame
=
function
(
id
)
{
clearTimeout
(
id
);
};
}
function
formatNumber
(
num
)
{
var
neg
=
(
num
<
0
),
x
,
x1
,
x2
,
x3
,
i
,
len
;
num
=
Math
.
abs
(
num
).
toFixed
(
self
.
decimals
);
num
+=
''
;
x
=
num
.
split
(
'
.
'
);
x1
=
x
[
0
];
x2
=
x
.
length
>
1
?
self
.
options
.
decimal
+
x
[
1
]
:
''
;
if
(
self
.
options
.
useGrouping
)
{
x3
=
''
;
for
(
i
=
0
,
len
=
x1
.
length
;
i
<
len
;
++
i
)
{
if
(
i
!==
0
&&
((
i
%
3
)
===
0
))
{
x3
=
self
.
options
.
separator
+
x3
;
}
x3
=
x1
[
len
-
i
-
1
]
+
x3
;
}
x1
=
x3
;
}
// optional numeral substitution
if
(
self
.
options
.
numerals
.
length
)
{
x1
=
x1
.
replace
(
/
[
0-9
]
/g
,
function
(
w
)
{
return
self
.
options
.
numerals
[
+
w
];
})
x2
=
x2
.
replace
(
/
[
0-9
]
/g
,
function
(
w
)
{
return
self
.
options
.
numerals
[
+
w
];
})
}
return
(
neg
?
'
-
'
:
''
)
+
self
.
options
.
prefix
+
x1
+
x2
+
self
.
options
.
suffix
;
}
// Robert Penner's easeOutExpo
function
easeOutExpo
(
t
,
b
,
c
,
d
)
{
return
c
*
(
-
Math
.
pow
(
2
,
-
10
*
t
/
d
)
+
1
)
*
1024
/
1023
+
b
;
}
function
ensureNumber
(
n
)
{
return
(
typeof
n
===
'
number
'
&&
!
isNaN
(
n
));
}
self
.
initialize
=
function
()
{
if
(
self
.
initialized
)
return
true
;
self
.
error
=
''
;
self
.
d
=
(
typeof
target
===
'
string
'
)
?
document
.
getElementById
(
target
)
:
target
;
if
(
!
self
.
d
)
{
self
.
error
=
'
[CountUp] target is null or undefined
'
return
false
;
}
self
.
startVal
=
Number
(
startVal
);
self
.
endVal
=
Number
(
endVal
);
// error checks
if
(
ensureNumber
(
self
.
startVal
)
&&
ensureNumber
(
self
.
endVal
))
{
self
.
decimals
=
Math
.
max
(
0
,
decimals
||
0
);
self
.
dec
=
Math
.
pow
(
10
,
self
.
decimals
);
self
.
duration
=
Number
(
duration
)
*
1000
||
2000
;
self
.
countDown
=
(
self
.
startVal
>
self
.
endVal
);
self
.
frameVal
=
self
.
startVal
;
self
.
initialized
=
true
;
return
true
;
}
else
{
self
.
error
=
'
[CountUp] startVal (
'
+
startVal
+
'
) or endVal (
'
+
endVal
+
'
) is not a number
'
;
return
false
;
}
};
// Print value to target
self
.
printValue
=
function
(
value
)
{
var
result
=
self
.
options
.
formattingFn
(
value
);
if
(
self
.
d
.
tagName
===
'
INPUT
'
)
{
this
.
d
.
value
=
result
;
}
else
if
(
self
.
d
.
tagName
===
'
text
'
||
self
.
d
.
tagName
===
'
tspan
'
)
{
this
.
d
.
textContent
=
result
;
}
else
{
this
.
d
.
innerHTML
=
result
;
}
};
self
.
count
=
function
(
timestamp
)
{
if
(
!
self
.
startTime
)
{
self
.
startTime
=
timestamp
;
}
self
.
timestamp
=
timestamp
;
var
progress
=
timestamp
-
self
.
startTime
;
self
.
remaining
=
self
.
duration
-
progress
;
// to ease or not to ease
if
(
self
.
options
.
useEasing
)
{
if
(
self
.
countDown
)
{
self
.
frameVal
=
self
.
startVal
-
self
.
options
.
easingFn
(
progress
,
0
,
self
.
startVal
-
self
.
endVal
,
self
.
duration
);
}
else
{
self
.
frameVal
=
self
.
options
.
easingFn
(
progress
,
self
.
startVal
,
self
.
endVal
-
self
.
startVal
,
self
.
duration
);
}
}
else
{
if
(
self
.
countDown
)
{
self
.
frameVal
=
self
.
startVal
-
((
self
.
startVal
-
self
.
endVal
)
*
(
progress
/
self
.
duration
));
}
else
{
self
.
frameVal
=
self
.
startVal
+
(
self
.
endVal
-
self
.
startVal
)
*
(
progress
/
self
.
duration
);
}
}
// don't go past endVal since progress can exceed duration in the last frame
if
(
self
.
countDown
)
{
self
.
frameVal
=
(
self
.
frameVal
<
self
.
endVal
)
?
self
.
endVal
:
self
.
frameVal
;
}
else
{
self
.
frameVal
=
(
self
.
frameVal
>
self
.
endVal
)
?
self
.
endVal
:
self
.
frameVal
;
}
// decimal
self
.
frameVal
=
Math
.
round
(
self
.
frameVal
*
self
.
dec
)
/
self
.
dec
;
// format and print value
self
.
printValue
(
self
.
frameVal
);
// whether to continue
if
(
progress
<
self
.
duration
)
{
self
.
rAF
=
requestAnimationFrame
(
self
.
count
);
}
else
{
if
(
self
.
callback
)
self
.
callback
();
}
};
// start your animation
self
.
start
=
function
(
callback
)
{
if
(
!
self
.
initialize
())
return
;
self
.
callback
=
callback
;
self
.
rAF
=
requestAnimationFrame
(
self
.
count
);
};
// toggles pause/resume animation
self
.
pauseResume
=
function
()
{
if
(
!
self
.
paused
)
{
self
.
paused
=
true
;
cancelAnimationFrame
(
self
.
rAF
);
}
else
{
self
.
paused
=
false
;
delete
self
.
startTime
;
self
.
duration
=
self
.
remaining
;
self
.
startVal
=
self
.
frameVal
;
requestAnimationFrame
(
self
.
count
);
}
};
// reset to startVal so animation can be run again
self
.
reset
=
function
()
{
self
.
paused
=
false
;
delete
self
.
startTime
;
self
.
initialized
=
false
;
if
(
self
.
initialize
())
{
cancelAnimationFrame
(
self
.
rAF
);
self
.
printValue
(
self
.
startVal
);
}
};
// pass a new endVal and start animation
self
.
update
=
function
(
newEndVal
)
{
if
(
!
self
.
initialize
())
return
;
newEndVal
=
Number
(
newEndVal
);
if
(
!
ensureNumber
(
newEndVal
))
{
self
.
error
=
'
[CountUp] update() - new endVal is not a number:
'
+
newEndVal
;
return
;
}
self
.
error
=
''
;
if
(
newEndVal
===
self
.
frameVal
)
return
;
cancelAnimationFrame
(
self
.
rAF
);
self
.
paused
=
false
;
delete
self
.
startTime
;
self
.
startVal
=
self
.
frameVal
;
self
.
endVal
=
newEndVal
;
self
.
countDown
=
(
self
.
startVal
>
self
.
endVal
);
self
.
rAF
=
requestAnimationFrame
(
self
.
count
);
};
// format startVal on initialization
if
(
self
.
initialize
())
self
.
printValue
(
self
.
startVal
);
};
test/lib/rearrange.js
0 → 100644
浏览文件 @
895fce58
var
fs
=
require
(
'
fs
'
);
var
path
=
require
(
'
path
'
);
var
inputPath
=
path
.
resolve
(
__dirname
,
'
../data/house-price-area.json
'
);
var
outputPath
=
path
.
resolve
(
__dirname
,
'
../data/house-price-area2.json
'
);
var
xGridCount
=
20
;
var
yGridCount
=
20
;
var
dimX
=
0
;
var
dimY
=
1
;
function
process
()
{
var
data
=
readFile
(
inputPath
);
data
=
JSON
.
parse
(
data
);
if
(
!
(
data
instanceof
Array
))
{
throw
new
Error
(
'
Data should be array
'
);
}
var
xMin
=
Infinity
;
var
xMax
=
-
Infinity
;
var
yMin
=
Infinity
;
var
yMax
=
-
Infinity
;
data
.
forEach
(
function
(
point
)
{
xMin
=
Math
.
min
(
point
[
dimX
],
xMin
);
xMax
=
Math
.
max
(
point
[
dimX
],
xMax
);
yMin
=
Math
.
min
(
point
[
dimY
],
yMin
);
yMax
=
Math
.
max
(
point
[
dimY
],
yMax
);
});
console
.
log
(
'
xMin
'
,
xMin
,
'
xMax
'
,
xMax
,
'
yMin
'
,
yMin
,
'
yMax
'
,
yMax
);
var
cellWidth
=
(
xMax
-
xMin
)
/
xGridCount
;
var
cellHeight
=
(
yMax
-
yMin
)
/
yGridCount
;
var
grids
=
[];
var
gridsSize
=
[];
data
.
forEach
(
function
(
point
)
{
var
gridXIndex
=
Math
.
floor
((
point
[
dimX
]
-
xMin
)
/
cellWidth
);
var
gridYIndex
=
Math
.
floor
((
point
[
dimY
]
-
yMin
)
/
cellHeight
);
var
line
=
grids
[
gridYIndex
]
||
(
grids
[
gridYIndex
]
=
[]);
var
cell
=
line
[
gridXIndex
]
||
(
line
[
gridXIndex
]
=
[]);
cell
.
push
(
point
);
gridsSize
[
gridYIndex
]
=
gridsSize
[
gridYIndex
]
||
[];
gridsSize
[
gridYIndex
][
gridXIndex
]
=
gridsSize
[
gridYIndex
][
gridXIndex
]
||
[];
gridsSize
[
gridYIndex
][
gridXIndex
]
=
cell
.
length
;
});
// Sort for render outline firstly.
for
(
var
i
=
0
;
i
<
grids
.
length
;
i
++
)
{
var
line
=
grids
[
i
];
if
(
!
line
||
!
line
.
length
)
{
continue
;
}
for
(
var
j
=
0
;
j
<
line
.
length
;
j
++
)
{
var
cell
=
line
[
j
];
if
(
!
cell
||
!
cell
.
length
)
{
continue
;
}
cell
.
sort
(
function
(
a
,
b
)
{
return
b
.
length
-
a
.
length
;
});
}
}
var
output
=
[];
var
hasMore
;
do
{
hasMore
=
false
;
for
(
var
i
=
0
;
i
<
grids
.
length
;
i
++
)
{
var
lines
=
grids
[
i
];
if
(
!
lines
||
!
lines
.
length
)
{
continue
;
}
for
(
var
j
=
0
;
j
<
lines
.
length
;
j
++
)
{
var
cell
=
lines
[
j
];
if
(
!
cell
||
!
cell
.
length
)
{
continue
;
}
var
idx
=
Math
.
floor
(
Math
.
random
()
*
cell
.
length
);
if
(
idx
===
cell
.
length
)
{
idx
--
;
}
var
point
=
cell
[
idx
];
cell
.
splice
(
idx
,
1
);
output
.
push
(
point
);
hasMore
|=
cell
.
length
>
0
;
}
}
}
while
(
hasMore
);
output
=
JSON
.
stringify
(
output
);
writeToFile
(
outputPath
,
output
);
console
.
log
(
'
Done.
'
);
}
function
readFile
(
fullFilePath
)
{
return
fs
.
readFileSync
(
fullFilePath
,
{
encoding
:
'
utf-8
'
});
}
function
writeToFile
(
outputPath
,
text
)
{
fs
.
writeFileSync
(
outputPath
,
text
,
{
encoding
:
'
utf-8
'
});
}
process
();
test/scatter-stream-visual.html
浏览文件 @
895fce58
因为 它太大了无法显示 source diff 。你可以改为
查看blob
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录