使用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继承方式实例
Oct 29 Javascript
用JQuery实现全选与取消的两种简单方法
Feb 22 Javascript
js显示文本框提示文字的方法
May 07 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
JavaScript统计网站访问次数的实现代码
Nov 18 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
jQuery  ready方法实现原理详解
Oct 19 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
Dec 09 Javascript
使用angular-cli webpack创建多个包的方法
Oct 16 Javascript
JavaScript动态检测密码强度原理及实现方法详解
Jun 11 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
Jun 05 Javascript
JavaScript实现网页计算器功能
Oct 29 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
神族 Protoss 历史背景
2020/03/14 星际争霸
php调用KyotoTycoon简单实例
2015/04/02 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
javascript radio 联动效果
2009/03/04 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Numpy之random函数使用学习
2019/01/29 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
大学生职业生涯规划书范文
2014/01/04 职场文书
模具毕业生推荐信
2014/02/15 职场文书
力学专业求职信
2014/07/23 职场文书
销售2014年度工作总结
2014/12/08 职场文书
委托书英文
2015/01/28 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
举起手来观后感
2015/06/09 职场文书
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
Linux中sftp常用命令整理
2022/06/28 Servers