【问题标题】:How to change vue.js directive depending on viewport?如何根据视口更改 vue.js 指令?
【发布时间】:2021-10-22 16:56:02
【问题描述】:

我有一个带有v-rellax 指令的元素,用于在此div 中启用视差滚动:

<div id="image" v-rellax="{ speed: -5 }"></div>

现在我需要将speed 属性更改为-3 以使其适应不同的screen width。有没有办法改变speed

1. in a `media query`
2. in `vue.js`
3. in `javascript`

vue 有没有一种简单的方法来做到这一点?

编辑:

我已尝试实施提供的解决方案,但视差滚动停止工作。我做错了吗?

<script>
export default {
  name: "home",
  data: { rellax_speed: -5 },
  created() {
    window.addEventListener('resize', (event) => {
      if (event.target.innerWidth >= 576) {
        this.rellax_speed = -3;
        return;
      }
      this.rellax_speed = -5;
    })
  }
}
</script>

模板:

<div id="image" v-rellax="{ speed: rellax_speed }"></div>

编辑2:

<script>
export default {
  name: "home",
  data() {
    return {
      r_speed: -5
    }
  },
  methods: {
    onresize(event) {
      if (event.target.innerWidth >= 576) {
        this.r_speed = -3;
        return;
      }
      this.r_speed = -5
    }
  },
  created() {
    window.addEventListener("resize", this.onresize)
  },
  beforeDestroy() {
    window.removeEventListener("resize", this.onresize, true)
  }
}
</script>

模板:

<div id="image" v-rellax="{ speed: r_speed }"></div>

【问题讨论】:

    标签: javascript html css laravel vue.js


    【解决方案1】:

    好的,相信能理解你。

    编辑:

    谢谢你 tony19 :)

    在数据中创建 vrelaxSpeed。初始值:-5,在你的指令中使用它。

    data() {
       return { 
          vrellaxSpeed: -5
       }
    },
    methods:{
       onResize(event) {
          if (event.target.innerWidth > 1280) {
            this.vrellaxSpeed = -3;
            return;
          }
          this.vrellaxSpeed = -5;
       }
    },
    created() {
       window.addEventListener('resize', this.onResize)
    },
    beforeDestroy() {
       window.removeEventListener('resize', this.onResize, true);
    }
    

    在你的 vue 组件中创建一个computed

    computed: {
       getVrellaxSpeed() {
          return window.innerWidth > 1280 ? -3 : -5;
       }
    }
    

    然后,在你的指令属性中使用它。

    <div id="image" v-rellax="{ speed: getVrellaxSpeed }"></div>
    

    我没有测试过,请试试这个并给我反馈以帮助你:)

    【讨论】:

    • @tony19 edit 部分中的代码会产生内存泄漏吗?
    • github.com/croutonn/vue-rellax 转到页面并查看销毁标题。指令参数是对象
    • @ÖmerFarukKüçük 您的代码有效,但存在一个问题。它仅在视口宽度发生变化时有效,而不是在您加载视口大于设置像素宽度的页面时。有什么方法可以添加这个功能?
    • @ArturMüllerRomanov 是的,由于 true 参数添加到 removeEventListener() 调用,当前编辑仍会导致内存泄漏。没有对应的 addEventListener()true 参数(该标志启用捕获事件侦听器而不是默认冒泡),因此 removeEventListener() 调用不会删除任何内容。解决方法是不通过true
    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 2016-02-18
    • 2012-09-28
    • 2016-09-29
    • 2016-01-07
    • 1970-01-01
    • 2015-09-24
    • 2014-12-18
    相关资源
    最近更新 更多