0
点赞
收藏
分享

微信扫一扫

vue实现悬浮广告飘窗组件

盖码范 2022-03-20 阅读 79
前端

vue实现悬浮广告飘窗组件

<template>
    <!--悬浮小广告样式的提示信息-->
    <div id="thediv" ref="thediv" style="background:red;position: absolute; z-index: 111; left: 0; top: 0" v-show="theDivShow"
         @mouseover="clearFdAd" @mouseout="starFdAd">
        <div style="position: absolute;cursor: pointer;font-size: 12px;color: #999999;" @click="theDivShow = false">
            关闭
        </div>
        <a href="javascript:;">
            <img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw" width="100%" border="0"/>
        </a>
    </div>
</template>

<script>
var interval;
export default {
    data() {
        return {
            xPos: 0,
            yPos: 0,
            xin: true,
            yin: true,
            step: 1,
            delay: 18,
            height: 0,
            Hoffset: 0,
            Woffset: 0,
            yon: 0,
            xon: 0,
            pause: true,
            theDivShow: true,
        };
    },

    mounted() {
        interval = setInterval(this.changePos, this.delay);
    },

    methods: {
        changePos() {
            let width = document.documentElement.clientWidth;
            let height = document.documentElement.clientHeight;
            this.Hoffset = this.$refs.thediv.offsetHeight; //获取元素高度
            this.Woffset = this.$refs.thediv.offsetWidth;

            // 滚动部分跟随屏幕滚动
            // this.$refs.thediv.style.left = (this.xPos + document.body.scrollLeft + document.documentElement.scrollLeft) + "px";
            // this.$refs.thediv.style.top = (this.yPos + document.body.scrollTop + document.documentElement.scrollTop) + "px";

            // 滚动部分不随屏幕滚动
            this.$refs.thediv.style.left =
                this.xPos + document.body.scrollLeft + "px";
            this.$refs.thediv.style.top = this.yPos + document.body.scrollTop + "px";

            if (this.yon) {
                this.yPos = this.yPos + this.step;
            } else {
                this.yPos = this.yPos - this.step;
            }
            if (this.yPos < 0) {
                this.yon = 1;
                this.yPos = 0;
            }
            if (this.yPos >= height - this.Hoffset) {
                this.yon = 0;
                this.yPos = height - this.Hoffset;
            }

            if (this.xon) {
                this.xPos = this.xPos + this.step;
            } else {
                this.xPos = this.xPos - this.step;
            }
            if (this.xPos < 0) {
                this.xon = 1;
                this.xPos = 0;
            }
            if (this.xPos >= width - this.Woffset) {
                this.xon = 0;
                this.xPos = width - this.Woffset;
            }
        },
        clearFdAd() {
            clearInterval(interval);
        },
        starFdAd() {
            interval = setInterval(this.changePos, this.delay);
        },
    },
};
</script>

<style lang="scss" scoped>
#thediv {
    z-index: 100;
    position: absolute;
    top: 43px;
    left: 2px;
    height: 120px;
    width: 200px;
    //overflow: hidden;

    img {
        width: 100%;
        height: 100%;
    }
}
</style>

举报

相关推荐

0 条评论