使用CSS样式position:fixed水平滚动的方法


Posted in Javascript onFebruary 19, 2014

使用CSS样式"position:fixed"可以使div块固定在一个固定位置,即使有滚动条也不会改变其位置。position:fixed给很多开发者带来了惊艳的效果,然而当出现水平滚动条时,效果就不那么容易接受了。有时候我们希望当出现水平滚动条时,div块可以随滚动条左右移动,实现垂直固定定位(fixed),水平相对定位(absolute)。本文提供一个解决方法,附jquery扩展源码。

本文的实现方式是使用js来控制div块随滚动条水平滚动,原理就是当window对象发生scroll事件和resize事件使,更新div块的left或right的值,使其相对浏览器左边或右边的位置实时改变。div块需要时position:fixed样式修饰。

当div块在水平方向上是相对浏览器右边固定的,那么当window对象发生scroll或resize事件时,就更新其right样式值,其值应该是:

var new_right = ($(window).scrollLeft() + $(window).width() - $(document).width() + original_right) + 'px'

当div块在水平方向上是相对浏览器左边固定的,那么当window对象发生scroll或resize事件时,就更新其left样式值,其值应该是:
var new_left = (original_left - $(window).scrollLeft()) + 'px'

上面代码中出现的original_left和original_right是最初div块的left和right值。完整的jquery扩展代码如下:
(function($){ 
$.ScrollFixed = function(el, options){ 
var base = this; 
base.$el = $(el); 
base.el = el; 
var target = base.$el; 
var original_left = parseInt(target.css('left')); 
var original_right = parseInt(target.css('right')); var _fix_position = function(){ 
if(base.options.fixed == 'right'){ 
target.css('right', ($(window).scrollLeft() + $(window).width() - $(document).width() + original_right) + 'px'); 
} else if(base.options.fixed == 'left'){ 
target.css('left', (original_left - $(window).scrollLeft()) + 'px'); 
} 
}; 
var windowResize = function(){ 
_fix_position(); 
}; 
var windowScroll = function(){ 
_fix_position(); 
}; 
base.init = function(){ 
base.options = $.extend({}, $.ScrollFixed.defaultOptions, options); 
$(window).resize(windowResize); 
$(window).scroll(windowScroll); 
_fix_position(); 
console.log(base.options.fixed); 
}; 
base.init(); 
}; 
$.ScrollFixed.defaultOptions = { 
fixed:'left' 
}; 
$.fn.scrollFixed = function(options){ 
return this.each(function(){ 
(new $.ScrollFixed(this, options)); 
}); 
}; 
})(jQuery);

使用实例:
$('#leftsider').scrollFixed({fixed:'left'}); 
$('#rightsider').scrollFixed({fixed:'right'});
Javascript 相关文章推荐
javascript获得CheckBoxList选中的数量
Oct 27 Javascript
Javascript Function对象扩展之延时执行函数
Jul 06 Javascript
浅析document.createDocumentFragment()与js效率
Jul 08 Javascript
javascript中Date对象的getDay方法使用指南
Dec 22 Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
遍历json 对象的属性并且动态添加属性的实现
Dec 02 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
Jul 18 Javascript
Vue中对拿到的数据进行A-Z排序的实例
Sep 25 Javascript
微信小程序自定义弹窗wcPop插件
Nov 19 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
JS this关键字在ajax中使用出现问题解决方案
Jul 17 Javascript
jQuery拖拽div实现思路
Feb 19 #Javascript
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 #Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 #Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 #Javascript
javascript动态向网页中添加表格实现代码
Feb 19 #Javascript
javascript实现动态侧边栏代码
Feb 19 #Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 #Javascript
You might like
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
PHP实现的oracle分页函数实例
2016/01/25 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
js实现点击生成随机div
2020/01/16 Javascript
python万年历实现代码 含运行结果
2017/05/20 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
python实现视频压缩功能
2020/12/18 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
客服文员岗位职责
2013/11/29 职场文书
七一党建活动方案
2014/01/28 职场文书
文明工地标语
2014/06/16 职场文书
大学新生军训自我鉴定
2014/09/18 职场文书
热血教师观后感
2015/06/10 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
JS实现简单的九宫格抽奖
2022/06/28 Javascript