aboutsummaryrefslogtreecommitdiff
path: root/src/site/components/grid/waterfall/WaterfallItem.vue
diff options
context:
space:
mode:
authorPitu <[email protected]>2018-09-16 01:09:02 -0300
committerPitu <[email protected]>2018-09-16 01:09:02 -0300
commitfe10a00ba9a3c30d8718ca004ccd19518466f5bd (patch)
tree369752f59a88dd03df1e9752be0ba166bf93c933 /src/site/components/grid/waterfall/WaterfallItem.vue
parentFirst version of start script (diff)
downloadhost.fuwn.me-fe10a00ba9a3c30d8718ca004ccd19518466f5bd.tar.xz
host.fuwn.me-fe10a00ba9a3c30d8718ca004ccd19518466f5bd.zip
Site
Diffstat (limited to 'src/site/components/grid/waterfall/WaterfallItem.vue')
-rw-r--r--src/site/components/grid/waterfall/WaterfallItem.vue60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/site/components/grid/waterfall/WaterfallItem.vue b/src/site/components/grid/waterfall/WaterfallItem.vue
new file mode 100644
index 0000000..597cca6
--- /dev/null
+++ b/src/site/components/grid/waterfall/WaterfallItem.vue
@@ -0,0 +1,60 @@
+<style>
+ .waterfall-item {
+ position: absolute;
+ }
+</style>
+<template>
+ <div class="waterfall-item">
+ <slot/>
+ </div>
+</template>
+<script>
+import imagesLoaded from 'imagesloaded';
+export default {
+ name: 'WaterfallItem',
+ props: {
+ order: {
+ type: Number,
+ default: 0
+ },
+ width: {
+ type: Number,
+ default: 150
+ }
+ },
+ data() {
+ return {
+ itemWidth: 0,
+ height: 0
+ };
+ },
+ created() {
+ this.$watch(() => this.height, this.emit);
+ },
+ mounted() {
+ this.$el.style.display = 'none';
+ this.$el.style.width = `${this.width}px`;
+ this.emit();
+ imagesLoaded(this.$el, () => {
+ this.$el.style.left = '-9999px';
+ this.$el.style.top = '-9999px';
+ this.$el.style.display = 'block';
+ this.height = this.$el.offsetHeight;
+ this.itemWidth = this.$el.offsetWidth;
+ });
+ },
+ methods: {
+ emit() {
+ this.$parent.$emit('itemRender');
+ },
+ getMeta() {
+ return {
+ el: this.$el,
+ height: this.height,
+ width: this.itemWidth,
+ order: this.order
+ };
+ }
+ }
+}
+</script>