【问题标题】:Trigger a event when the user is on the page当用户在页面上时触发事件
【发布时间】:2016-02-09 09:23:01
【问题描述】:

我有这个代码

$(document).ready(function(){
    var fade_in = function(){
        $(".quote").fadeIn();
    }
    setTimeout(fade_in, 2000);
    var fade_out = function() {
      $(".quote").fadeOut();
    }
    setTimeout(fade_out, 10000);
});

它的作用是 div “引用”慢慢淡入,停留几秒钟然后淡出。我想要的是当用户在页面上时所有这一切都会发生,如果你不在页面中,文本会淡入,淡出并且你会错过它。我该怎么做?

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

有两种方法

第一:(有点旧)

$(document).ready(function() {
  window.onfocus = function() {
    var fade_in = function() {
      $(".quote").fadeIn();
    }
    setTimeout(fade_in, 2000);
    var fade_out = function() {
      $(".quote").fadeOut();
    }
    setTimeout(fade_out, 10000);
  };
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="quote">quote</div>

第二:

function getHiddenProp() {
  var prefixes = ['webkit', 'moz', 'ms', 'o'];

  // if 'hidden' is natively supported just return it
  if ('hidden' in document) return 'hidden';

  // otherwise loop over all the known prefixes until we find one
  for (var i = 0; i < prefixes.length; i++) {
    if ((prefixes[i] + 'Hidden') in document)
      return prefixes[i] + 'Hidden';
  }

  // otherwise it's not supported
  return null;
}

function isHidden() {
  var prop = getHiddenProp();
  if (!prop) return false;

  return document[prop];
}

// use the property name to generate the prefixed event name
var visProp = getHiddenProp();
if (visProp) {
  var evtname = visProp.replace(/[H|h]idden/, '') + 'visibilitychange';
  document.addEventListener(evtname, visChange);
}

function visChange() {
  var txtFld = document.getElementById('visChangeText');

  if (txtFld) {
    if (!isHidden()) {
      var fade_in = function() {
        $(".quote").fadeIn();
      }
      setTimeout(fade_in, 2000);
      var fade_out = function() {
        $(".quote").fadeOut();
      }
      setTimeout(fade_out, 10000);

    };
  }
}
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

 <div class="quote">quote</div>

【讨论】:

  • 第一个成功了,但现在每次我聚焦页面时,文本都会再次出现。我该怎么做才能让文本只淡入淡出一次?
  • 使用window.onfocus = null 取消绑定事件。您可以在 fade_out 函数中使用它。
【解决方案2】:

这将在页面 div 可见时执行

$(document).ready(function(){
        $( "div:visible" ).click(function() {
  $( this ).css( "background", "yellow" );
});
    });

【讨论】:

  • 他/她希望它在用户聚焦选项卡时运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多