在vue页面监听中如何修改子元素的样式

项目原先代码:

需要实现的是导航栏在页面下滑到一定位置的时候,对其样式进行修改
父组件system.vue页面

<template>  
<div>
	<div id="sysytem">
		<!-- 导航栏 -->
		<head-tabbar  ref ="tabbar" class="tabbar"></head-tabbar>
		<!-- 轮播图 -->
		<el-carousel class="lunbo" :interval="3000" arrow="always">
			<el-carousel-item
			  v-for="(item, index) in bg_img"
			  :key="index">
			  <img :src="'data:image/png;base64,'+ item" class="lunbo_img" alt="轮播图">
			</el-carousel-item>			
		</el-carousel>
	</div>	
</div>
</template>

父组件的样式system.vue页面

子绝父相原理使导航栏和背景图重叠在一起,并让导航栏悬浮在图片上

    #sysytem {
        position: relative;
        width: 100%;
        height: 600px;      
    }
    
    .tabbar {
        position: absolute;
        height: 80px;
        width: 94%;
        left: 3%;
        z-index: 999;
    }
    
    .lunbo {
        position: absolute;
        height: 600px;
        z-index: 1;
    }

预想实现和代码:

现在想实现海致星图官网的导航栏效果

监听页面滚动
在methods中定义一个方法

 methods: {
            handleScroll() {
                var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
                var tabbar = document.querySelector('.tabbar');
                console.log("tabbar节点", tabbar);

                if (scrollTop >= 600) {
             
                    //滚动大于600(超过图片)的时候要做的操作
                    //定位改为固定定位,始终位于窗口视图的顶端,并且改颜色为白色和设置边框阴影
                    tabbar.style.position = "fixed";
                    tabbar.style.boxShadow = " 0 2px 4px 0 rgb(21 134 223 / 10%)";
                    tabbar.style.backgroundColor = "rgba(255, 255, 255, 0.8)"; 
                } else if (scrollTop > 0) {
                
                    //滚动大于0小于600(在图片内部)的时候要做的操作
                    //定位改为固定定位,始终位于窗口视图的顶端,并且改颜色为黑色设置透明度
                    tabbar.style.position = "fixed";
                    tabbar.style.backgroundColor = "rgba(0, 0, 0, 0.4)";
                } else {
                
                    //等于0(导航栏在顶部)的时候要做的操作
                    //改为初始的绝对定位,并且颜色改为透明,边框阴影去掉
                    tabbar.style.position = "absolute";
                    tabbar.style.backgroundColor = "transparent";
                    tabbar.style.boxShadow = "";
                   
                }
            }
   }

bug和原因分析:

发现修改不成功,导航栏的背景颜色不准确。
这时候调试,打印 console.log(“tabbar节点”, tabbar);

在这里插入图片描述

然后看看子组件 headTabbar.vue

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

问题出本来应该给.el-menu 修改背景颜色,但是我是去对它的父亲元素进行背景颜色的修改
这一层在这里插入图片描述
等同于这一层在这里插入图片描述


解决方案:

其实我们是需要修改的是其子元素节点,利用firstChild或者firstElementChild(指向第一个Element类型的子元素)

提示:这里填写该问题的具体解决方案:例如:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage()。

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值