2017-12-13 17 views
2

vue.jsでレンダリングされたビデオポスター画像/ jpgのリストがあります。これらの画像の上にマウスを置くと、gifアニメーションに置き換えられます。私はmouseoutでimage/jpgをもう一度見たいと思う。だから私は、マウスオーバー/アウトイベントを追跡するが、期待通りにSRC属性を交換しても動作しないことができたの運賃:vue.jsはマウスオーバーでアニメーションgifをjpgに置き換えます。

<div v-for="video in videos"> 
    <img 
     v-on:mouseover="mouseOver(video.id)" 
     v-on:mouseout="mouseOut(video.id)" 
     v-bind:src="mouse[video.id] === 1 ? 'images.gif' : 'images.gif'" 
    />  
</div> 


var app4 = new Vue({ 
    el: '#app-videomanager', 
    router, 
    data: { 
    mouse: {} // the id is alphanumeric 
    }, 
    computed: { 
    videos() { 
     return store.state.videos; // not included in the example 
    } 
    }, 
    methods: { 
    mouseOver: function(id) { 
     this.mouse[id] = 1; 
    }, 
    mouseOut: function(id) { 
     this.mouse[id] = 0; 
    } 
    } 
}); 

それマウスオーバーとマウスアウト関数内SRC属性を置き換えるために理にかなっての代わりに、あまりにも多くのロジックをコンポーネントテンプレートに入れていますか? vue.jsでDOMのこの部分をどのように操作できますか?ここで

+0

IDがmouse' 'には存在しませんVueはあなたがそれらを設定したときに反応させません。 [Vue.set](https://vuejs.org/v2/api/#Vue-set)を参照してください。 –

+0

IDが存在しました。私の解決策のこの部分は機能していました。 maxpajは私にとって洗練されたソリューションを提供しました。 – user3072843

+0

'mouse:{}'と言ったように宣言した場合、その中には 'id'がありません。 –

答えて

4

は、ソリューションです:

は、コンポーネントでmouseOverCheckを宣言します。私はdataプロパティではなく機能であると宣言される方法を変更することに注意してください:あなたのHTMLで次に

data() { 
    return { 
     mouseOverCheck: '' 
    } 
} 

、次の操作を行います。あなたはそれを宣言するとき

<img 
    v-on:mouseover="mouseOverCheck = video.id" 
    v-on:mouseout="mouseOverCheck = ''" 
    v-bind:src="mouseOverCheck === video.id ? 'images.gif' : 'images.jpg'" /> 
関連する問題