@benshi.ai/js-sdk
Version:
Benshi SDK
59 lines (44 loc) • 1.66 kB
text/typescript
import { EventEmitter } from 'events'
import BsViewableImpressionObserver from "./ViewableImpressionObserver"
import {
Dataset,
IImpressionManager,
ImpressionEventType,
ViewableImpressionOptions
} from "./typings"
import ViewableImpressionEngine from "./ViewableImpressionEngine"
class ImpressionsDetector extends EventEmitter implements IImpressionManager {
private impressionEngine
private options: ViewableImpressionOptions = {
triggerInterval: 2000,
keepVisibleTimeout: 1000,
intersectionThreshold: 0.9
}
constructor(options?: Partial<ViewableImpressionOptions>) {
super()
if (options) {
this.options = Object.assign(this.options, options)
}
if (this.options.intersectionThreshold > 1) {
this.options.intersectionThreshold = 1
} else if (this.options.intersectionThreshold < 0.1) {
this.options.intersectionThreshold = 0.1
}
this.impressionEngine = new ViewableImpressionEngine(
new BsViewableImpressionObserver(this.options.intersectionThreshold),
this.options)
this.impressionEngine.on(ImpressionEventType.Impression, data => {
this.emit(ImpressionEventType.Impression, data)
})
}
start(containerClassname: string, itemClassname: string, appData: Dataset) {
this.impressionEngine.start(containerClassname, itemClassname, appData)
}
restart(appData: Dataset) {
this.impressionEngine.restart(appData)
}
stop() {
this.impressionEngine.stop()
}
}
export default ImpressionsDetector