我一直是想搞清楚控制HTML5視頻/ YouTube視頻簡單的指令模式中的兩路整合視頻的currentTime的。AngularJS:用指令
我想要做的「角辦法」,從而綁定視頻的屬性添加到對象模型。但是,在處理視頻的「currentTime」屬性時,我遇到了一些問題,因爲它不斷更新。
這是我走到這一步:
HTML控件:
<!--range input that both show and control $scope.currentTime -->
<input type="range" min=0 max=60 ng-model="currentTime">
<!--bind main $scope.currentTime to someVideo directive's videoCurrentTime -->
<video some-video video-current-time="currentTime"> </video>
指令:
app.controller('MainCtrl', function ($scope) {
$scope.currentTime = 0;
})
app.directive('someVideo', function ($window) {
return{
scope: {
videoCurrentTime: "=videoCurrentTime"
},
controller: function ($scope, $element) {
$scope.onTimeUpdate = function() {
$scope.videoCurrentTime = $element[0].currentTime;
$scope.$apply();
}
},
link: function (scope, elm) {
scope.$watch('videoCurrentTime', function (newVar) {
elm[0].currentTime = newVar;
});
elm.bind('timeupdate', scope.onTimeUpdate);
}
}
})
JSFiddler:http://jsfiddle.net/vQ5wQ/
::
雖然這看起來作品,請注意每次onTimeUpdate
火災時,會觸發$watch
。
例如,當視頻運行到10秒時,它會通知onTimeUpdate將模型更改爲10,$ watch將捕獲此更改並要求視頻再次尋找10秒。
這段時間創建了一個循環,導致視頻滯後於時間。
你認爲有更好的方法來做到這一點?一種不會觸發不需要的$ watch的方法?任何建議表示讚賞。
'currentTime'的分辨率是多少?我知道'ontimeupdate'每運行一幀視頻(每秒多次) - 'currentTime'獲得亞秒精度嗎?如果是這樣,在'$ watch'內部,您可以在進行更改之前檢查'newVar'和'elem [0] .currentTime'之間的最小差異。 – jkjustjoshing