我創建的角度成分,其功能爲編輯視頻文件的時間表。 (像這樣):如何改變大量元素的立場沒有滯後
我遇到一些問題確定時間表上的所有測量桿的位置時,雖然,我試圖找出到位置更好的辦法他們每個人。目前,我正在使用轉換函數(pxToFrame和frameToPx)將幀值轉換爲像素值,以便知道每個測量條的位置。當我們放大時(意味着大部分時間軸都在屏幕外,並且我們滾動到放大部分),這必須針對每個像素條進行,這意味着要針對視頻中的每一幀執行操作文件(很多!)當我放大足夠的渲染許多測量線時,這會導致組件行爲非常緩慢。這成爲如此昂貴的reFlow,它將瀏覽器掛起很多秒。
我想知道什麼是防止這種滯後的渲染位置樣式數千個元素創造了最好的方法是什麼?
我曾嘗試推行angular2虛擬滾動,企圖只呈現在視圖元素,而不是所有的人,但分量不具有水平滾動的實現呢。
上更好的戰略,以接近這一點,或呈現此組件時,減少迴流的數量的方式任何想法?我們正在處理10個數量爲1000的測量條元素(對於視頻文件中的每個幀),因此它需要大幅減少。
謝謝!
僅供參考, 這是我的html:
<div
// this.measureLineArray holds an array of numbers that represent the frames at which there should be a line
*ngFor="let frame of this.measureLineArray"
class="measure-line-container"
// This ngStyle binding is how I have been changing the position property, but it's deathly slow when we are dealing with many measure lines
[ngStyle]="getMeasureLinePxFromFrame(frame)"
>
// This is the class for labeled lines
<div
class="measure-line-label"
*ngIf="frame % this.labelInterval === 0"
>
<div class="text">{{frame.toString()}}</div>
<div class="bar"></div>
</div>
// This is the class for unlabeled lines
<div
class="measure-line"
*ngIf="!(frame % this.labelInterval === 0)"
>
<div class="bar"></div>
</div>
</div>
下面是創建延遲
// Here is the function that returns the position styling for each measure line
private getMeasureLinePxFromFrame(frame : Frame) : any
{
let measureLineStyle = {
'left': this.frameToPx(frame) + 'px'
}
return measureLineStyle;
}
// This is the conversion function, utilizing the width of the container element to determine of each measure-line
private frameToPx(frame : number) : number
{
let currentProgress : number = frame/this.numFrames;
return Math.floor(this.Timeline.clientWidth * currentProgress);
}
而且這裏是有關CSS有問題的功能:
.measure-line-container {
display: inline-flex;
position: absolute;
height: 100%;
flex-direction: column;
justify-content: flex-end;
}
.measure-line {
position: relative;
bottom: 0px;
.bar {
width: 1px;
height: 10px;
background-color: black;
}
}
.measure-line-label {
position: relative;
height: 50%;
display: flex;
flex-direction: column;
justify-content: flex-end;
.bar {
position: relative;
bottom: 0px;
left: 0px;
width: 1px;
height: 100%;
background-color: black;
}
.text {
position: absolute;
top: 0px;
margin-left: 3px;
color: black;
font-size: 8px;
text-align: center;
user-select: none;
}
}
我實現了一種activeFrames虛擬滾動的,它真的是由於事實,在變焦中旬,我有很多的行來呈現,即使在視圖提高性能,但它仍然是相當laggy。有更快的方法來改變[NgStyle]綁定以外的元素的樣式嗎?這似乎是一個非常昂貴的約束。 – LarsMonty
您是否閱讀過上述鏈接的文章?由於您的更新數量異常,請嘗試在「NgZone」外部運行它們,並使用本機瀏覽器API進行更新。 –
我正在使用zone.runOutsideNgZone,並認爲它沒有工作,但它實際上幫助了性能,我只是一個白癡,並且仍然通過過濾所有框架來創建measureLineArray,而不是僅過濾activeFrame。我已經改變了這一點,現在它工作得非常快!感謝您的資源。我現在理解更好的角度更改檢測。 – LarsMonty