![](/img/trans.png)
[英]Async-loaded scripts with DOMContentLoaded or load event handlers not being called?
[英]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.x
或e.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.