vue滚动到一定高度更换图片问题

发布于 2022-09-12 00:36:12 字数 1957 浏览 9 评论 0

如题,我原先用的jquery判断高度,后替换图片
image.png
前方高能!!
我的目录结构是这样的(此处省略由于一开始把img放在与src同级的static带来的心酸泪史,各种图片打包路径问题,这坑好大!)
image.png
这时候我发现我用的vue-cli npm run build 之后图片都被打包到assets,但是路径不一样了!!原先img->header->logo.png打包后直接成img->logo.ad7783.png,所以我上面的写法是无法找到图片的,我又把hash给去掉了(找了好久)。
终于成功了,但是,想要通过logo_status来判断更换图片[这样是不是就能用上图片hash了,猜测],可是并没有变化,是哪里写错了吗?
PS:有其他更好的方案亦可,前提我想知道我这样写错在哪~

header.vue

<img :src="this.logo_status==0?logo_src:logo1_src" alt="LOGO" />
 
 data() {
    return {
      logo_status:0,
      logo_src: this.$store.state.logo_src,
      logo1_src:this.$store.state.logo1_src,
   }
 },
 methods: {
 changeLogo(){
 let haschange = false;
    $(window).scroll(function () {
         var top = parseInt($pele.height()) * 0.3;
        var scrollTop = parseInt($(window).scrollTop());
        if (scrollTop > top) {
            if (!haschange) {
                $ele.addClass(style);
//                 $img.attr('src', './assets/img/LOGO1.png');
//                 $img.attr('src', this.$store.state.logo1_src);
                this.logo_status =1;

                $a.css('color', '#414458').last().css('color', ' #fff');
                $('.drop-menu li a').css('color', '#ffffff');
                haschange = true;
            }
        } else {
            if (haschange) {
                $ele.removeClass(style);
//                 $img.attr('src', './assets/img/LOGO.png');
//                 $img.attr('src', this.$store.state.logo_src);
                this.logo_status =0;
                $a.css('color', '#fff');
                haschange = false
            }
        }
    })
  }
}

store

const state = {
  logo_src:require('../assets/img/header/LOGO.png'),
  logo1_src:require('../assets/img/header/LOGO1.png')
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沉睡月亮 2022-09-19 00:36:12

那个,少侠,你可以看一下打包后的dist目录。是不会存在assets文件夹的,因为这个文件夹中的资源在打包过程中被分发到了js/css/img等文件夹中,然后你动态设置img的src,这时候已经到了浏览器端,webpack已经管不了了,img的src真真切切被设置为了./assets/xxx,然而打包后并没有这个文件夹,所以找不到啦。

解决办法:
1.使用require

$img.attr('src', require('./assets/img/LOGO1.png'));

动态设置为了一个模块,require可以正确找到这个图片。

2.放到public文件夹下
打包后public里的资源会复制到dist,动态设置绝对路径后,还是能根据绝对路径找到这个地址。

笑看君怀她人 2022-09-19 00:36:12

粗略的看了下代码,直接使用require('../assets/img/header/LOGO.png')或者cdn地址,还有methods第一次看到这么写的。。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文