代码:

(function ($) {
"use strict";
$.fn.pin = function (options) {
var scrollY = 0, elements = [], disabled = false, $window = $(window); options = options || {}; var recalculateLimits = function () {
for (var i = 0, len = elements.length; i < len; i++) {
var $this = elements[i]; if (options.minWidth && $window.width() <= options.minWidth) {
if ($this.parent().is(".pin-wrapper")) { $this.unwrap(); }
$this.css({ width: "", left: "", top: "", position: "" });
if (options.activeClass) { $this.removeClass(options.activeClass); }
disabled = true;
continue;
} else {
disabled = false;
} var $container = options.containerSelector ? $this.closest(options.containerSelector) : $(document.body);
var offset = $this.offset();
var containerOffset = $container.offset();
var parentOffset = $this.offsetParent().offset(); if (!$this.parent().is(".pin-wrapper")) {
$this.wrap("<div class='pin-wrapper'>");
} var pad = $.extend({
top: 0,
bottom: 0
}, options.padding || {}); $this.data("pin", {
pad: pad,
from: (options.containerSelector ? containerOffset.top : offset.top) - pad.top,
to: containerOffset.top + $container.height() - $this.outerHeight() - pad.bottom,
end: containerOffset.top + $container.height(),
parentTop: parentOffset.top
}); $this.css({ width: $this.outerWidth() });
$this.parent().css("height", $this.outerHeight());
}
}; var onScroll = function () {
if (disabled) { return; } scrollY = $window.scrollTop(); var elmts = [];
for (var i = 0, len = elements.length; i < len; i++) {
var $this = $(elements[i]),
data = $this.data("pin"); if (!data) { // Removed element
continue;
} elmts.push($this); var from = data.from - data.pad.bottom,
to = data.to - data.pad.top; if (from + $this.outerHeight() > data.end) {
$this.css('position', '');
continue;
} if (from < scrollY && to > scrollY) {
!($this.css("position") == "fixed") && $this.css({
left: $this.offset().left,
top: data.pad.top
}).css("position", "fixed");
if (options.activeClass) { $this.addClass(options.activeClass); }
} else if (scrollY >= to) {
$this.css({
left: "",
top: to - data.parentTop + data.pad.top
}).css("position", "absolute");
if (options.activeClass) { $this.addClass(options.activeClass); }
} else {
$this.css({ position: "", top: "", left: "" });
if (options.activeClass) { $this.removeClass(options.activeClass); }
}
}
elements = elmts;
}; var update = function () { recalculateLimits(); onScroll(); }; this.each(function () {
var $this = $(this),
data = $(this).data('pin') || {}; if (data && data.update) { return; }
elements.push($this);
$("img", this).one("load", recalculateLimits);
data.update = update;
$(this).data('pin', data);
}); $window.scroll(onScroll);
$window.resize(function () { recalculateLimits(); });
recalculateLimits(); $window.load(update); return this;
};
})(jQuery);

调用方法:

$("#fixdiv").pin();

注意如页面有动态生成的HTML,请在HTML生成之后调用 pin()

Jquery定位插件,固定元素在页面某个位置,不随滚动条滚动的更多相关文章

  1. 获取一个元素距离顶部的位置和window的滚动值

    获取一个元素距离顶部的位置: $(".box").offset().top; 获取window的滚动值: $(window).scrollTop();

  2. 获取元素在页面中位置 getBoundingClientRect()

    DOM 原生方法getBoundingClientRect()获取元素相对视口位置 DOMRect 对象包含了一组用于描述边框的只读属性--left.top.right和bottom,单位为像素.除了 ...

  3. 网站开发常用jQuery插件总结(12)固定元素插件scrolltofixed

    这个插件在前段时间用过一次,当时是改一个网站.要求顶部的菜单栏随着滚动条的滚动而固定.也大体写了一下,不过在文章中也只是提了一下,文章地址:jQuery插件固定元素位置. 在这篇文章中,再进行总结一下 ...

  4. FullPage.js-基于 jQuery 的插件全屏滚动插件

    fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站.如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容, ...

  5. jquery.validate插件在booststarp中的运用

    现在在网络上已经可以找到很多基于bootstarp的表单认证,但是验证的都不全面的,下载后,我们还要理解作者的思路然后进行修改添加,这种修改方式往往适合学习,时间很多的时候.但是我们很多时候是没有时间 ...

  6. appium+robotframework+python连接真机定位不到元素的问题处理

    这几天遇到了一个比较奇怪的问题,使用RF框架进行自动化测试的时候定位不到部分元素 并且这个元素的是有id的,更换了xpath定位也行不通,冥思苦想,加上谷歌百度,终于解决了 解决步骤如下: 1.定位问 ...

  7. jquery 禁止滚动条滚动,并且滚动条不消失,页面大小不闪动

    一,禁止滚动,滚动条不消失,页面大小不闪动 //禁止滚动条滚动 function unScroll() { var top = $(document).scrollTop(); $(document) ...

  8. 网站开发常用jQuery插件总结(13)定位插件scrollto

    一.scrollto插件功能 scrollto用于定位页面中元素的位置,并使滚动条滚动到当前元素. 二.scrollto官方地址 https://github.com/flesler/jquery.s ...

  9. 用 jQuery Masonry 插件创建瀑布流式的页面(转)

    瀑布流式的页面,最早我是在国外的一个叫 Pinterest 的网站上看到,这个网站爆发,后来国内的很多网站也使用了这种瀑布流方式来展示页面(我不太喜欢瀑布流这个名字). 我们可以使用 jQuery 的 ...

随机推荐

  1. electron项目中使用jquery不生效的解决方法

    才开始接触electron的时候,本来想用bootstrap快速搞一个demo,无奈有些功能没法用,之后才意识到是jquery没发用,之后找了一些资料,比较简单的方式就是在引入jquery之前加入一下 ...

  2. YOURLS' API

    YOURLS' API 特征 生成或获取现有的短URL,带有顺序关键字或自定义关键字获取一些关于你的链接的统计信息:点击链接,点击最少的链接,最新链接输出格式:JSON.XML或简单的原始文本Auth ...

  3. 理解进程调度时机跟踪分析进程调度与进程切换的过程(Linux)

    ----------------------------------------------------------------------------------- 理解进程调度时机跟踪分析进程调度 ...

  4. IDEA 开发环境中 调试Spark SQL及遇到问题解决办法

    1.问题 java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space // :: WAR ...

  5. VC2012编译CEF3-转

    原文地址:http://blog.csdn.net/tiplip/article/details/42047815 下载 代码下载:http://cefbuilds.com/,CEF 3.2556.1 ...

  6. mysql利用yum安装指定数据存放路径

    测试环境: Centos6.5.MySQL5.6.28 yum安装具有速度快,便捷关键是不用编译,编译时间太久了! 01.下载mysql https://mirrors.tuna.tsinghua.e ...

  7. Oracle的PLSQL别名中文出现乱码解决方法

     乱码之乱,乱在心里.行而上,眼迷茫! 01.查询oracle服务端默认语言 select * from nls_database_parameters NLS_LANGUAGE AMERICAN   ...

  8. 使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度

    上一篇博文使用PhoneGap开发基于Html5应用一:PhoneGap简单介绍 中我介绍了怎样从phonegap官网上下载源代码并启动第一个应用,今天我们把phonegap的应用略微改一下,让他实现 ...

  9. BroadcastReceiver之实现锁屏、解锁样例

    好久没有写android的小样例了,因为前几天写了一篇关于Intent.Action的文章(http://blog.csdn.net/ljphhj/article/details/38796739). ...

  10. 通过配置CPU参数 worker_cpu_affinity 提升nginx性能

    简介 Nginx默认没有开启利用多核cpu,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu的性能.cpu是任务处理,计算最关键的资源,cpu核越多,性能就越好. 规 ...