Jquery定位插件,固定元素在页面某个位置,不随滚动条滚动
代码:
- (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定位插件,固定元素在页面某个位置,不随滚动条滚动的更多相关文章
- 获取一个元素距离顶部的位置和window的滚动值
获取一个元素距离顶部的位置: $(".box").offset().top; 获取window的滚动值: $(window).scrollTop();
- 获取元素在页面中位置 getBoundingClientRect()
DOM 原生方法getBoundingClientRect()获取元素相对视口位置 DOMRect 对象包含了一组用于描述边框的只读属性--left.top.right和bottom,单位为像素.除了 ...
- 网站开发常用jQuery插件总结(12)固定元素插件scrolltofixed
这个插件在前段时间用过一次,当时是改一个网站.要求顶部的菜单栏随着滚动条的滚动而固定.也大体写了一下,不过在文章中也只是提了一下,文章地址:jQuery插件固定元素位置. 在这篇文章中,再进行总结一下 ...
- FullPage.js-基于 jQuery 的插件全屏滚动插件
fullPage.js 是一个基于 jQuery 的插件,它能够很方便.很轻松的制作出全屏网站.如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容, ...
- jquery.validate插件在booststarp中的运用
现在在网络上已经可以找到很多基于bootstarp的表单认证,但是验证的都不全面的,下载后,我们还要理解作者的思路然后进行修改添加,这种修改方式往往适合学习,时间很多的时候.但是我们很多时候是没有时间 ...
- appium+robotframework+python连接真机定位不到元素的问题处理
这几天遇到了一个比较奇怪的问题,使用RF框架进行自动化测试的时候定位不到部分元素 并且这个元素的是有id的,更换了xpath定位也行不通,冥思苦想,加上谷歌百度,终于解决了 解决步骤如下: 1.定位问 ...
- jquery 禁止滚动条滚动,并且滚动条不消失,页面大小不闪动
一,禁止滚动,滚动条不消失,页面大小不闪动 //禁止滚动条滚动 function unScroll() { var top = $(document).scrollTop(); $(document) ...
- 网站开发常用jQuery插件总结(13)定位插件scrollto
一.scrollto插件功能 scrollto用于定位页面中元素的位置,并使滚动条滚动到当前元素. 二.scrollto官方地址 https://github.com/flesler/jquery.s ...
- 用 jQuery Masonry 插件创建瀑布流式的页面(转)
瀑布流式的页面,最早我是在国外的一个叫 Pinterest 的网站上看到,这个网站爆发,后来国内的很多网站也使用了这种瀑布流方式来展示页面(我不太喜欢瀑布流这个名字). 我们可以使用 jQuery 的 ...
随机推荐
- Golang 中使用多维 map
http://tnt.wicast.tk/2015/11/02/golang-multiple-dimension-map/ Golang 的 XML/JSON 解析库乍看使用起来很方便,只要构造一样 ...
- 如何使用动画和精灵表单 Cocos2d-x 2.1.4
本文实践自 Ray Wenderlich.Tony Dahbura 的文章< How to Use Animations and Sprite Sheets in Cocos2D ...
- WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列
WordPress后台默认是不显示文章.分类等信息ID的,查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现: ...
- 如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间
1.安装FF的Firebug组件:点击FF的Tools的Add-ons菜单,输入Firebug关键字,并选择合适的版本Install. 2.安装完毕后地址栏右边会出现一个小虫图标,右边还有一个下拉箭头 ...
- nginx+tomcat+redis完成session共享(转载)
转载:http://blog.csdn.net/grhlove123/article/details/48047735 tomcat7下基于redis的session共享所需jar包: http:// ...
- 新浪面试题:只允许使用++操作符实现加减乘除运算(c语言版)
//假定a,b都是正整数,只允许使用++而不使用-,--,*,/操作符的情况下实现加减乘除运算 //使用++实现加法: int jiafa(int a,int b){ for (int i=0;i&l ...
- python手记(42)
#!/usr/bin/env python #-*- coding: utf-8 -*- #code:myhaspl@qq.com import cv2 import numpy as np fn1= ...
- [Python]网络爬虫(八):糗事百科的网络爬虫(v0.2)源码及解析
转自:http://blog.csdn.net/pleasecallmewhy/article/details/8932310 项目内容: 用Python写的糗事百科的网络爬虫. 使用方法: 新建一个 ...
- github下载源码的三种方式
从github上下载源码的三种方式 CreationTime--2018年6月7日15点21分 Author:Marydon 1.情景展示 2.实现方式 方式一:直接点击"Downloa ...
- iOS-APP启动页加载广告
概述 加载广告页, 展现跳过按钮实现倒计时功能, 并判断广告页面是否更新. 详细 代码下载:http://www.demodashi.com/demo/10698.html 目前市场上很多APP(如淘 ...