Skip to content

Commit

Permalink
add support for prop mutation
Browse files Browse the repository at this point in the history
  • Loading branch information
nickforddev committed Sep 27, 2020
1 parent 57076bb commit d195759
Showing 1 changed file with 36 additions and 2 deletions.
38 changes: 36 additions & 2 deletions packages/vue-freezeframe/src/components/VueFreezeframe.vue
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<template>
<div class="vue-freezeframe">
<div class="vue-freezeframe" v-if="ready">
<slot v-if="$slots.default" />
<img v-else-if="src" ref="img" :src="src" />
</div>
</template>

<script lang="ts">
import Freezeframe from 'freezeframe'
import { Component, Vue } from 'vue-property-decorator'
import { Component, Vue, Watch } from 'vue-property-decorator'
import { FreezeframeOptions, Freeze } from 'freezeframe/types'
@Component({
Expand All @@ -22,14 +22,35 @@ export default class VueFreezeframe extends Vue {
options?: FreezeframeOptions
// data
ready = false
isPlaying = false
$freezeframe?: Freezeframe
$refs!: {
img: HTMLImageElement
}
@Watch('src')
onSrcChanged() {
this.reset()
}
@Watch('options')
onOptionsChanged() {
this.reset()
}
mounted() {
this.init()
}
beforeDestroy() {
this.removeEventListeners()
}
async init() {
this.ready = true
await this.$nextTick()
if (this.$slots.default) {
this.$freezeframe = new Freezeframe(this.$el, this.options)
} else if (this.src) {
Expand All @@ -38,6 +59,13 @@ export default class VueFreezeframe extends Vue {
this.addEventListeners()
}
async reset() {
this.ready = false
this.removeEventListeners()
await this.$nextTick()
this.init()
}
addEventListeners() {
if (this.$freezeframe) {
this.$freezeframe.on('toggle', (items: Freeze[], isPlaying: boolean) => {
Expand All @@ -48,6 +76,12 @@ export default class VueFreezeframe extends Vue {
}
}
removeEventListeners() {
if (this.$freezeframe) {
this.$freezeframe.destroy()
}
}
start() {
if (this.$freezeframe) {
this.$freezeframe.start()
Expand Down

0 comments on commit d195759

Please sign in to comment.