Skip to content

Commit 72d9b3f

Browse files
committed
feat(VideoLoader): add ability to manually check inviewport status
1 parent c87c54a commit 72d9b3f

File tree

7 files changed

+61
-10
lines changed

7 files changed

+61
-10
lines changed

README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,27 @@ export class AppComponent {
186186
```
187187

188188

189+
### Check inviewport status manually
190+
191+
```html
192+
<sn-video-loader
193+
[sizes]="sizes"
194+
[video]="video"
195+
[loop]="true"
196+
[muted]="true"
197+
[autoplay]="true"
198+
[controls]="true"
199+
[playsInline]="true"
200+
type="video/mp4"
201+
videoClass="video"
202+
posterClass="img"
203+
#videoEl>
204+
</sn-video-loader>
205+
206+
<button (click)="videoEl.checkInViewportStatus()">Check status</button>
207+
```
208+
209+
189210
## Development server
190211

191212
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.

package-lock.json

Lines changed: 7 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"dependencies": {},
4848
"peerDependencies": {
4949
"@angular/core": ">=5.0.0 <6.0.0 || >=5.0.0-beta <6.0.0",
50-
"@thisissoon/angular-inviewport": ">=2.1.1 <3.0.0",
50+
"@thisissoon/angular-inviewport": ">=2.2.0 <3.0.0",
5151
"rxjs": ">=5.0.0 <6.0.0"
5252
},
5353
"devDependencies": {
@@ -63,7 +63,7 @@
6363
"@angular/platform-browser": "^5.2.5",
6464
"@angular/platform-browser-dynamic": "^5.2.5",
6565
"@angular/router": "^5.2.5",
66-
"@thisissoon/angular-inviewport": "^2.1.1",
66+
"@thisissoon/angular-inviewport": "^2.2.0",
6767
"@types/jasmine": "~2.5.53",
6868
"@types/jasminewd2": "~2.0.2",
6969
"@types/node": "~6.0.60",

src/app/app.component.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,8 @@ <h3>Bottom image imageLoaded event count: <span class="image-loaded-count">{{ im
3434
[playsInline]="true"
3535
type="video/mp4"
3636
videoClass="video"
37-
posterClass="img">
37+
posterClass="img"
38+
#videoEl>
3839
</sn-video-loader>
40+
41+
<button (click)="videoEl.checkInViewportStatus()">Check</button>

src/app/video-loader/video-loader/video-loader.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
[attr.playsinline]="playsInline"
1212
(loadeddata)="onVideoLoad()"
1313
(inViewportChange)="onInViewportChange($event)"
14+
#videoEl="snInViewport"
1415
snInViewport>
1516

1617
<sn-image-loader

src/app/video-loader/video-loader/video-loader.component.spec.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
22
import { NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3-
import { WindowRef } from '@thisissoon/angular-inviewport';
3+
import { InViewportModule } from '@thisissoon/angular-inviewport';
44

55
import { VideoLoaderComponent } from './video-loader.component';
66
import { video, sizes } from '../../app-data';
@@ -11,7 +11,7 @@ describe('VideoLoaderComponent', () => {
1111

1212
beforeEach(async(() => {
1313
TestBed.configureTestingModule({
14-
providers: [WindowRef],
14+
imports: [InViewportModule.forRoot()],
1515
schemas: [NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA],
1616
declarations: [ VideoLoaderComponent ]
1717
})
@@ -100,4 +100,10 @@ describe('VideoLoaderComponent', () => {
100100
expect(component.poster).toEqual('foo');
101101
});
102102

103+
it('should check inviewport status', () => {
104+
const spy = spyOn(component.videoEl, 'calculateInViewportStatus');
105+
component.checkInViewportStatus();
106+
expect(spy).toHaveBeenCalled();
107+
});
108+
103109
});

src/app/video-loader/video-loader/video-loader.component.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ import {
33
Input,
44
HostBinding,
55
NgZone,
6+
ViewChild,
67
AfterViewInit,
78
OnDestroy,
89
ChangeDetectorRef
910
} from '@angular/core';
1011
import { Subject } from 'rxjs/Subject';
1112
import { fromEvent } from 'rxjs/observable/fromEvent';
1213
import { takeUntil, debounceTime, startWith } from 'rxjs/operators';
13-
import { WindowRef } from '@thisissoon/angular-inviewport';
14+
import { WindowRef, InViewportDirective } from '@thisissoon/angular-inviewport';
1415

1516
import { ResponsiveImage, Size } from '../../image-loader/shared/image.model';
1617
import { Breakpoint } from '../../image-loader/shared/breakpoint.model';
@@ -100,6 +101,14 @@ export class VideoLoaderComponent implements AfterViewInit, OnDestroy {
100101
*/
101102
@Input()
102103
public playsInline: boolean;
104+
/**
105+
* Reference to inviewport directive instance
106+
*
107+
* @type {InViewportDirective}
108+
* @memberof VideoLoaderComponent
109+
*/
110+
@ViewChild('videoEl')
111+
public videoEl: InViewportDirective;
103112
/**
104113
* List of breakpoints to select video from
105114
*
@@ -220,6 +229,14 @@ export class VideoLoaderComponent implements AfterViewInit, OnDestroy {
220229
this.inViewport = inViewport;
221230
this.loadVideo();
222231
}
232+
/**
233+
* Checks if video element is in viewport
234+
*
235+
* @memberof VideoLoaderComponent
236+
*/
237+
public checkInViewportStatus(): void {
238+
this.videoEl.calculateInViewportStatus();
239+
}
223240
/**
224241
* On width change, determine if device has changed and
225242
* reset directive

0 commit comments

Comments
 (0)