2017-03-12 12 views
0

はこれまでに同様の質問をしていましたが、しばらくの間このままでした。divをマウスでクリックしたときにx時間が経過していない場合、vue.js

たとえば、div1にマウスを合わせてdiv2をクリックしたときなど、特定のイベントでv-showsを表示するdivがあります。私はマウスが一定の時間それに触れていないときにこのdivが消えるようにしたい、3秒を言う。

私の問題は私がv-onを使うことができないことです:mouseleave(マウスの上にマウスが置かれていないと表示されるので)ので、特定の遅延後にdiv-v-showをトグルする必要があります。私は行方不明のものがありますか?私は何を使うべきですか?

ありがとうございました!

答えて

0

からthis.visible = falseに変更されたコンポーネントのレンダリング機能(またはその他の機能)で、setTimeoutを定義済みの期間後に実行できます。

+0

ああ、これは私が使用するために探しているだろう、ありがとう! 私は、マウスがdiv上に乗っていないかどうかを確認することは可能でしょうか?私はmouseleaveなどを確認することができますが、私は問題のdivが一定量の時間以上にぶら下がっていないことを見ることができる必要があることを知っています。 –

+0

@ akre_11あなたは変数にタイムアウトを保存し、マウス入力時にタイムアウトをリセット/キャンセルすることができます。 –

+0

感謝の男!それは私が今行っているものですが、私はclearTimeout();を使用して問題を抱えています。 mouseoverで 'v-on:mouseover =" clearTimeout(this.timer) 'を実行しようとしています。ここで' timer'はタイムアウトを保存したvarですが、クリアしたくないようです。 –

0

最も簡単な方法は、コンポーネントを使用するので、v-showに取り付けられたフラグを設定し、タイムアウトを使用して取り付けられたフックにイベントリスナーを追加することである:DIV上今たびにマウスの動きを

Vue.component('my-deiv', { 
    template: `<template id="block"><div v-show="show">A div</div></template>`, 
    mounted(){ 
    this.$el.addEventListener('mousemove',() => { 
     setTimeout(() => { 
     this.show = false; 
     }, 3000) 
    }) 
    }, 
    data(){ 
    return{ 
     show: true 
    } 
    } 
}); 

それはここで、タイムアウトを発射JSFiddleです:あなたはマウスがあるときdivを非表示にする場合https://jsfiddle.net/nb80sn52/

EDIT

一定の時間のためにそれに移動していない - しかし、マウスの終了は、その後、あなたがタイムアウトするたびに再起動することができないときにマウスの葉、ここで更新されたバージョンだときに、マウスの移動とは完全にそれを取り消す:

Vue.component('block', { 
    template: "#block", 
    mounted() { 
    this.timer = null; 

    this.$el.addEventListener('mousemove',() => { 
     clearTimeout(this.timer); 
     this.timer = setTimeout(() => { 
     this.show = false; 
     }, 3000) 
    }) 

    this.$el.addEventListener('mouseleave',() => { 
     clearTimeout(this.timer); 
    }) 
    }, 
    data() { 
    return { 
     show: true 
    } 
    } 
}) 

そしてJSFiddleのために:https://jsfiddle.net/utaaatjj/

+0

awesome!これは私が使用しているものです、ありがとうございます。 しかし、これはマウスが動いたときにdivを隠していますが、divがマウスになっているかどうかを確認する方法はありますか?私はそれが仕様に合うようにしなければならないので、一定の時間の間、setTimeoutを使用して? –

+0

ありがとう。 v-on:mouseoverとv-on:mouseleave関数を使用していますが、現在clearTimeout()に問題があります。 私のタイムアウトは 'timer'に格納されています。私は 'v-on:mouseover =" clearTimeout(タイマー) ""しかし、それは動作していないようです。 this.timerも機能しません。単にクリアしたくないだけです。私は何が欠けていますか? –

+0

また、私は 'timer'に自分のsetTimeoutを保存したいのですが、それをデータに置いたときにうまくいかないようです。残りのグローバル変数はどこにありますか?私はそれをグローバル変数にしようとしていますが、そのようには見えません...私はすべての方法でローカルに保存することができますが、私はそれが 'clearTimeout'で私の問題の根源かもしれないと思います! –

関連する問題