创建一个带有与电影同步的标记的javascript图
Creating an javascript graph with marker that is synchronize with a movie
我正在尝试创建一个用于脑电信号分析的在线网络工具。该工具假设显示eeg信号的图形,与显示给受试者的电影同步。
我已经在csharp上成功地实现了它,但我找不到一种方法可以用我看到的任何已知的javascript图表轻松地实现它。
可以在这里找到一个做类似事情的好工具的链接:
http://www.mesta-automation.com/real-time-line-charts-with-wpf-and-dynamic-data-display/
我试过使用dygraph和谷歌图表。我知道在服务器上创建一个后台线程应该相对容易,每隔50毫秒检查一次电影状态。我不能做的是动态地在图表上创建电影位置的标记。我可以在dygraph上绘制,但无法更改标记的位置。
为了澄清,我需要画一条垂直线作为标记。
我很痛苦。请帮助:)
多亏了Danvk,我才知道如何做到这一点。下面是展示这种解决方案的jsfiddler链接。
http://jsfiddle.net/ng9vy8mb/10/embedded/result/
下面是执行该任务的javascript代码。它在与视频同步时更改标记的位置。
还有一些改进可以做。
- 目前,如果用户放大了图形,然后单击它,缩放将被重置
- 不支持你看电影我希望很快我能发布一个更完整的解决方案,也能让用户从他们的电脑上传图形数据和视频
var dc;
var g;
var v;
var my_graph;
var my_area;
var current_time = 0;
//when the document is done loading, intialie the video events listeners
$(document).ready(function () {
v = document.getElementsByTagName('video')[0];
v.onseeking = function () {
current_time = v.currentTime * 1000;
draw_marker();
};
v.oncanplay = function () {
CreateGraph();
};
v.addEventListener('timeupdate', function (event) {
var t = document.getElementById('time');
t.innerHTML = v.currentTime;
g.updateOptions({
isZoomedIgnoreProgrammaticZoom: true
});
current_time = v.currentTime * 1000;
}, false);
});
function change_movie_position(e, x, points) {
v.currentTime = x / 1000;
}
function draw_marker() {
dc.fillStyle = "rgba(255, 0, 0, 0.5)";
var left = my_graph.toDomCoords(current_time, 0)[0] - 2;
var right = my_graph.toDomCoords(current_time + 2, 0)[0] + 2;
dc.fillRect(left, my_area.y, right - left, my_area.h);
};
//data creation
function CreateGraph() {
number_of_samples = v.duration * 1000;
// A basic sinusoidal data series.
var data = [];
for (var i = 0; i < number_of_samples; i++) {
var base = 10 * Math.sin(i / 90.0);
data.push([i, base, base + Math.sin(i / 2.0)]);
}
// Shift one portion out of line.
var highlight_start = 450;
var highlight_end = 500;
for (var i = highlight_start; i <= highlight_end; i++) {
data[i][2] += 5.0;
}
g = new Dygraph(
document.getElementById("div_g"),
data, {
labels: ['X', 'Est.', 'Actual'],
animatedZooms: true,
underlayCallback: function (canvas, area, g) {
dc = canvas;
my_area = area;
my_graph = g;
bottom_left = g.toDomCoords(0, 0);
top_right = g.toDomCoords(highlight_end, +20);
draw_marker();
}
});
g.updateOptions({
clickCallback: change_movie_position
}, true);
}
相关文章:
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 在控制器和数据对象之间同步数据
- 同步调用,直到用户通过angular验证为访问者
- javascript函数同步
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 音频和动画在javasctipt循环中同步
- 主线程上的同步XMLHttpRequest已弃用
- 主干网.与Safari同步问题
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 是否同步加载了LINK元素
- 异步获取数据使用JavaScript同步获取数据
- 以同步方式获取Javascript Promise的值
- ajax调用获胜't同步执行
- javascript函数中的异步与同步.(Node.js)
- 如何同步写入process.stdout
- JavaScript 函数同步执行
- HTML5应用程序数据库同步
- 创建一个带有与电影同步的标记的javascript图