簡體   English   中英

在完全加載 DOM 內容之前渲染 VueJS 事件處理程序?

[英]VueJS event handlers being rendered before DOM content is completely loaded?

我正在構建一個 Vuejs 應用程序,因此我將@mousemove指令與Vue-blotter結合使用。 下面,在“交互示例”部分下,我找到了一些用於操作<Vue-blotter/>組件屬性的基本代碼。 因此,通過少量重構,我將其添加到我的項目中,並將示例中的scope.material.uniforms.uSpeed.value = (ex + ey) / 4500更改為scope.material.uniforms.uSeed.value = (ex + ey) / 2000也是一個有效的屬性,稍后將顯示。 問題是,如果我在頁面完全加載之前移動 cursor,控制台將顯示此錯誤:

v-on 處理程序中的錯誤:“TypeError:未定義不是 object(評估 'scope.material.uniforms.uSeed')”

即使我在頁面完全加載后移動鼠標,此錯誤也會停止輸出。 我正在使用Vue-router ,這就是我的主頁視圖的樣子:

<template>
  <div class="home">
    <div class="contact"><a target="_blank" href="https://www.instagram.com/ammarr_yasserr/">Instagram</a><a target="_blank" href="mailto://ammaryasser6.2006@gmail.com">Email</a></div>
    <vue-blotter
    material-type= "LiquidDistortMaterial"
    text= "Portfolio"
    fill= "#EAEBED"
    family= "-apple-system, system-ui, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif"
    :paddingRight= "10"
    :paddingLeft= "10"
    :weight= "700"
    :uniforms= "{
      uSpeed: 0.1,
      uVolatility: 0.03,
      uSeed: 20
    }">
      <div class="hero" slot-scope="{ blotterScope }" @mousemove="(e) => mouseMove(e, blotterScope)">
        <span>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatem molestiae delectus, consequuntur ad iusto quis ab, natus nisi reiciendis reprehenderit est voluptatum praesentium voluptates nostrum tempore, veritatis repudiandae similique saepe?</p></span>
      </div>
    </vue-blotter>
  </div>
</template>

<script>
import '@/assets/stylesheets/Home.sass'
import VueBlotter from 'vue-blotter'
// import gsap from 'gsap'

export default {
  name: 'Home',
  data () {
    return {
      age: null
    }
  },
  components: { VueBlotter },
  created () {
    const birthday = new Date(2006, 1, 8)
    const ageDifMs = Date.now() - birthday.getTime()
    const ageDate = new Date(ageDifMs)

    this.age = Math.abs(ageDate.getUTCFullYear() - 1970)
  },
  methods: {
    mouseMove: (e, scope) => {
      scope.material.uniforms.uSeed.value = (e.x + e.y) / 2000
    }
  }
}
</script>

嘗試更改這些行

@mousemove="(e) => mouseMove(e, blotterScope)"
mouseMove: (e, scope) => {

分別給這些。

@mousemove="mouseMove(blotterScope, $event)"
mouseMove: (scope, e) => {

此外, ex可能應該類似於e.target.xe.currentTarget.x


讓我知道這是否可以解決您的錯誤。

您可以先檢查此 object 的存在,然后再對其進行操作。

也許是這樣的

let scope = scope || {};
scope.material = scope.material || {};
scope.material.uniforms = scope.materia.uniforms || {};
scope.material.uniforms.uSeed = scope.material.uniforms.uSeed || {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM