我目前正在构建一个基本的视频时间线。在这个时间线上是各种持续时间可变的媒体资产,代表资产的 DIV 的宽度反映了持续时间,1 秒被测量为 35 像素。因此,例如,一个 5 秒的资源将在时间轴上占用 175 像素的宽度。
因为时间线需要比我在页面上可用空间的宽度还要长,所以它需要水平滚动。我没有使用丑陋的标准滚动条,而是使用 jQuery 插件滚动条,它要求时间线的全宽 DIV 位于另一个 DIV 内,该 DIV 是页面可用区域的宽度并充当框架,与内部 DIV 绝对定位。当您向左或向右移动滚动条时,它会更改内部 DIV 的“左”值。
在给出了这个背景之后,我现在来解决我的问题。时间线上的资产需要水平调整大小以调整其持续时间。我使用 jQuery UI 进行了这项工作,但我需要这样做,以便当我将资产的右边缘拖动到构成时间线的外部 DIV 的右边缘附近时,时间线的内部 DIV 会向左移动(基本上是滚动)并且资产的宽度增加了 1 秒(35 像素)。
即使是最后一点,我也有一定程度的工作,但还不够好。我需要的是,当我向右拖动足够远,使我在取景 DIV 右边缘的 35-70 像素内时,内部 DIV 时间线将向左移动,资产的宽度将增加,这将一直发生,直到我将鼠标移回左侧。
我能想到的最好的例子是,当您在浏览器中选择文本并拖动到屏幕底部时,屏幕开始向下滚动,并且一直滚动到您向上移动鼠标为止。
目前我正在尝试通过绘制 jQuery UI 可调整大小元素的“resize”事件来实现这一点,但问题是我无法获得我刚才所说的那种连续效果,我必须继续进一步拖动鼠标向右,而不是仅仅保持静止。当我到达窗口的右边缘时,我必须释放鼠标按钮,移回调整大小手柄并再次开始拖动。
这是我试图编写的函数(仅供参考,.mediaInstance 是时间轴上的资产):
//Scroll Timeline when resized handle comes close to right edge
function timelineScroll() {
//console.log('running');
var mediaElement = $('#mediaTrack .mediaInstance.resizing');
var track = $('#horiz_container_inner');
//Determine location of right edge of the timeline viewport
var timeline = $('#horiz_container_outer');
var timelineOffset = timeline.offset();
var timelineLeft = timelineOffset.left;
var timelineRight = timelineLeft + $('#horiz_container_outer').width();
//Find right edge of current .mediaInstance
var instanceOffset = mediaElement.offset();
var instanceLeft = instanceOffset.left;
var instanceRight = instanceLeft + mediaElement.width();
if ( (timelineRight-instanceRight) < 35 ) {
var timelineCurrentLeft = Number(track.css('left').replace('px',''));
var timelineNewLeft = timelineCurrentLeft - 70;
track.css('left',timelineNewLeft);
mediaCurrentWidth = mediaElement.width();
mediaElement.width(mediaCurrentWidth+35);
if (currentMousePos.x > timelineRight) {
while (currentMousePos.x > timelineRight) {
var timelineCurrentLeft = Number(track.css('left').replace('px',''));
var timelineNewLeft = timelineCurrentLeft - 35;
track.css('left',timelineNewLeft);
mediaCurrentWidth = mediaElement.width();
mediaElement.width(mediaCurrentWidth+35);
}
}
}
}
你会注意到我什至在最后尝试了一个循环,基于鼠标位置比框架 DIV 的右边缘更远,但我认为它不会起作用,而且它没有......只是看起来让我陷入无限循环。
无论如何,我非常感谢任何人可以提供的任何帮助。我正在做一个周转时间很短的项目,而且我以前从未真正做过任何这些特殊的事情。