vue-insta-stories
v0.9.8
Published
Vue component for Instagram stories
Readme
Simple usage
<template>
<Stories :stories="items" />
</template>
<script>
import { Stories } from "vue-insta-stories";
export default {
components: { Stories },
data: () => ({
items: [
"https://picsum.photos/350/200/",
"https://picsum.photos/400/201/",
{
url: "https://file-examples-com.github.io/5mb.mp4",
type: "video",
},
]
})
};
</script>Props
| Property | Type | Default | Description |
|-----------------------|-----------------------|----------|--------------------------------------------------------------------|
| stories | Array<String|Object> | required | An array of image urls or array of story objects (more info below) |
| interval | Number | 2000 | Story duration in milliseconds |
| isPaused | Boolean | false | Toggle the playing state |
| loop | Boolean | false | Loop through stories |
| currentIndex | Number | 0 | Set the current story index |
| Events | | | |
| storyStart | Function(index) | - | Callback when a story starts |
| storyEnd | Function(index) | - | Callback when a story ends |
| allStoriesEnd | Function() | - | Callback when all stories have ended (not emitted if loop=true) |
| seeMore | Function(story) | - | Callback when user have pressed See more |
| prev | Function() | - | Callback when user press prev |
| next | Function() | - | Callback when user press next |
| update:currentIndex | Function(index) | - | |
| update:isPaused | Function(paused) | - | |
Story Object
| Property | Description |
|------------|----------------------------------------------------------------------|
| url | The url of the resource, image or video. |
| type | Optional. Type of the story. 'image' \| 'video' |
| duration | Optional. Duration for which a story should persist. |
| template | Optional. Renders story in a different template see more below. |
| seeMore | Optional. Enable see more on story (true \| { label: 'See more!' } |
Style
/** full screen on mobile & fixed size on desktop **/
.ig-stories {
position: absolute;
height: 100vh;
height: -webkit-fill-available;
width: 100vw;
top: 0;
}
@media (min-width: 768px) {
.ig-stories {
position: relative;
height: 730px;
width: 420px;
}
}if you are using tailwind you can write
<Stories class="absolute top-0 h-100vh w-100vw md:(h-730px w-420px relative)" />With header
<template>
<Stories :stories="items">
<template #header="{story}">
<story-header :story="story" />
</template>
</Stories>
</template>
<script>
import { Stories } from "vue-insta-stories";
export default {
components: { Stories },
data: () => ({
items: [ "https://picsum.photos/350/200/"]
})
};
</script>With custom slot
<template>
<Stories :stories="items">
<template #pool="{story}">
<pool-story :story="story" class="flex-grow"></pool-story>
</template>
</Stories>
</template>
<script>
import { Stories } from "vue-insta-stories";
export default {
components: { Stories },
data: () => ({
items: [{ poolId: 23, template: "pool" }]
})
};
</script>