<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
.test div{ width: 500px;height: 500px;}
#aa{ height: auto;}
</style>
<script src="Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
(function ($, window) {
var $window = $(window);
$.fn.lazyevent = function (options) {
var elements = this;
var settings = {
threshold: 0,
event: "scroll",
container: window,
skip_invisible: true,
fn: null,
data: null
};
function update() {
elements.each(function () {
var $this = $(this);
if (settings.skip_invisible && !$this.is(":visible")) {
return;
}
if (inviewport(this, settings)) {
$this.trigger("fire");
}
}); }
if (options) {
$.extend(settings, options);
}
var $container = (settings.container === undefined || settings.container === window) ? $window : $(settings.container); if (0 === settings.event.indexOf("scroll")) {
$container.bind(settings.event, function (event) { return update(); });
}
this.each(function () {
var self = this;
var $self = $(self);
self.fired = false;
$self.one("fire", function () {
if (!this.fired) {
if (settings.fn) {
settings.fn.call(self, settings.data);
}
self.fired = true;
var temp = $.grep(elements, function (element) { return !element.fired; });
elements = $(temp);
}
}); if (0 !== settings.event.indexOf("scroll")) {
$self.bind(settings.event, function (event) {
if (!self.fired) {
$self.trigger("fire");
}
});
}
}); $window.bind("resize", function (event) {
update();
}); var belowthefold = function (element, settings) {
var fold; if (settings.container === undefined || settings.container === window) {
fold = $window.height() + $window.scrollTop();
} else {
fold = $container.offset().top + $container.height();
}
return fold <= $(element).offset().top - settings.threshold;
}; var rightoffold = function (element, settings) {
var fold; if (settings.container === undefined || settings.container === window) {
fold = $window.width() + $window.scrollLeft();
} else {
fold = $container.offset().left + $container.width();
} return fold <= $(element).offset().left - settings.threshold;
};
var abovethetop = function (element, settings) {
var fold; if (settings.container === undefined || settings.container === window) {
fold = $window.scrollTop();
} else {
fold = $container.offset().top;
} return fold >= $(element).offset().top + settings.threshold + $(element).height();
}; var leftofbegin = function (element, settings) {
var fold; if (settings.container === undefined || settings.container === window) {
fold = $window.scrollLeft();
} else {
fold = $container.offset().left;
} return fold >= $(element).offset().left + settings.threshold + $(element).width();
};
var inviewport = function (element, settings) {
return !abovethetop(element, settings) && !leftofbegin(element, settings) &&
!belowthefold(element, settings) && !rightoffold(element, settings);
};
update();
return this;
}; })(jQuery, window);
</script>
<script type="text/javascript">
$(function () {
$("#aa").lazyevent({
data: "hello word",
fn: function (data) {
var html = $(this).html();
alert(data + ":" + html);
}
});
});
</script> </head>
<body>
<div style="height: 200px">
    </div>
    <div class="test">
        <div style="background-color: Green" >Green</div>
        <div style="background-color: Lime">Lime</div>
        <div style="background-color: Maroon; display:none">Maroon</div>
        <div style="background-color: Olive">Olive</div>
        <div style="background-color: Red; display: none">Red</div>
        <div style="background-color: ButtonFace">ButtonFace</div>
        <div style="background-color: Aqua">Aqua</div>
    <div style="background-color: AppWorkspace; height:auto;" id="aa" >AppWorkspace</div>
    </div>
</body>
</html>

压缩后的js代码:

    <script type="text/javascript">
(function (a, c) { var b = a(c); a.fn.lazyevent = function (j) { var g = this; var l = { threshold: 0, event: "scroll", container: c, skip_invisible: true, fn: null, data: null }; function m() { var n = 0; g.each(function () { var o = a(this); if (l.skip_invisible && !o.is(":visible")) { return } if (h(this, l)) { o.trigger("fire") } }) } if (j) { a.extend(l, j) } var d = (l.container === undefined || l.container === c) ? b : a(l.container); if (0 === l.event.indexOf("scroll")) { d.bind(l.event, function (n) { return m() }) } this.each(function () { var o = this; var n = a(o); o.fired = false; n.one("fire", function () { if (!this.fired) { if (l.fn) { l.fn.call(o, l.data) } o.fired = true; var p = a.grep(g, function (q) { return !q.fired }); g = a(p) } }); if (0 !== l.event.indexOf("scroll")) { n.bind(l.event, function (p) { if (!o.fired) { n.trigger("fire") } }) } }); b.bind("resize", function (n) { m() }); var f = function (n, p) { var o; if (p.container === undefined || p.container === c) { o = b.height() + b.scrollTop() } else { o = d.offset().top + d.height() } return o <= a(n).offset().top - p.threshold }; var k = function (n, p) { var o; if (p.container === undefined || p.container === c) { o = b.width() + b.scrollLeft() } else { o = d.offset().left + d.width() } return o <= a(n).offset().left - p.threshold }; var e = function (n, p) { var o; if (p.container === undefined || p.container === c) { o = b.scrollTop() } else { o = d.offset().top } return o >= a(n).offset().top + p.threshold + a(n).height() }; var i = function (n, p) { var o; if (p.container === undefined || p.container === c) { o = b.scrollLeft() } else { o = d.offset().left } return o >= a(n).offset().left + p.threshold + a(n).width() }; var h = function (n, o) { return !e(n, o) && !i(n, o) && !f(n, o) && !k(n, o) }; m(); return this } })(jQuery, window);
</script>

js自定义延迟执行函数的更多相关文章

  1. JS页面延迟执行一些方法(整理)

    一般在JS页面延迟执行一些方法.可以使用以下的方法 jQuery.delay()方法简介 http://shawphy.com/2010/11/jquery-delay.html jQuery中que ...

  2. JS 的立即执行函数

    JS 的立即执行函数 本文写于 2019 年 12 月 7 日 其实 ES6 之后有了之后,很多之前的用法都没必要了,立即执行函数就是其一. 今天看到一道面试题: 请「用自己的语言」简述 立即执行函数 ...

  3. js匿名自执行函数中闭包的高级使用(---------------------------******-----------------------------)

    先看看最常见的一个问题: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  4. JS中立即执行函数的理解

    1.匿名函数不能单独定义,必须进行赋值操作或者立即执行,否则会被JS引擎定义为语法错误 function(){alert(dada);} VM229:1 Uncaught SyntaxError: U ...

  5. IOS 关于取消延迟执行函数的种种。performSelector与cancelPreviousPerformRequestsWithTarget

    本文非本人撰写     @interface NSObject (NSDelayedPerforming) - (void)performSelector:(SEL)aSelector withObj ...

  6. js中立即执行函数写法理解

    在理解了一些函数基本概念后,回头看看( function(){…} )()和( function (){…} () )这两种立即执行函数的写法,最初我以为是一个括号包裹匿名函数, 并后面加个括号立即调 ...

  7. js匿名自执行函数

    匿名自执行函数:没有方法名的函数闭包:闭包是指有权访问另一个函数作用域变量的函数: 通过一个实例来解释: 从网上找到了一个案例,使用了for循环.匿名自执行函数.setTimeout. 案例1: va ...

  8. js的立即执行函数

    立即执行函数:常用于第三方库,好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),一般想到的方法就是使用立即执行函数.jQuery就是使用的立即执行函数. 函数 ...

  9. 【原】js离开页面执行函数 onbeforeunload与onunload事件

    在最近的项目中,需要做到一个时间,就是用户离开页面的时候,我需要缓存页面其中一部分的内容,但是我不需要用户刷新的时候也缓存,我只希望在我用户离开的时候 执行这个函数.百度之,有onbeforeunlo ...

随机推荐

  1. HTTP头部详解

    因为之后的HTTP头注入要学习这些所以就看了.觉得很不错,算是学习前的科普. <HTTP头部详解>转载自:http://www.cnblogs.com/lcamry/p/5763040.h ...

  2. 实现Redis的主从复制配置

    实现Redis的主从复制配置比较简单,而且容易明白. 下图是要配置的主从复制结构图: 1.说明 Redis主从复制中一个主服务可以有多个从服务,一个从服务可以有多个从服务. 配置比较简单,只需要更改r ...

  3. LUA require 搜索路径指定方法

    如果是一个 *.LUA 的文件, 里面用到了自己写的库, 或者第三方写的库, 但是你不想把它放到 lua 的安装目录里, 则在代码里面可以指定require搜索的路径. package.path = ...

  4. 【leetcode】Find Peak Element

    Find Peak Element A peak element is an element that is greater than its neighbors. Given an input ar ...

  5. ACM/ICPC 之 昂贵的聘礼-最短路解法(POJ1062)

    //转移为最短路问题,枚举必经每一个不小于酋长等级的人的最短路 //Time:16Ms Memory:208K #include<iostream> #include<cstring ...

  6. gtk+2.24.0-glib-2.28.1-staticLib-mingw32-x86-2016-08-10.7z

    GTK_PATH=D:/MSYS/opt/gtk+2.24.0-staticLib b1-static.sh --------------------------------------------- ...

  7. K3已被禁用的基础资料如何显示出来

    [基础资料]——[公共资料]——[物料.职员.客户==]——[查看]——[选项]——显示禁用基础资料——确定,就可以看见你所禁用过的基础资料,显示为红色字体! 同类问题example: 金蝶K3 禁用 ...

  8. best matched pair

    今天的模拟赛,被虐的不行....英文太差,弄不懂题意,弄懂题意了还不会... 感觉快要受不了了... #include <iostream> #include <cstdio> ...

  9. Enum:EXTENDED LIGHTS OUT(POJ 1222)

    亮灯 题目大意:有一个5*6的灯组,按一盏灯会让其他上下左右4栈和他自己灯变为原来相反的状态,要怎么按才会把所有的灯都按灭? 3279翻版题目,不多说,另外这一题还可以用其他方法,比如DFS,BFS, ...

  10. iOS-UIView 之 layoutMargins & preservesSuperviewLayoutMargins 解惑

    这里先看下苹果给出的解释: iOS8.0之后,uiview默认layoutMargins 为(8,8,8,8),也可以自己指定,仅适用于自动布局:当添加子view到父view上时,这样设置好约束 默认 ...