使用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 相关文章推荐
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
Jul 25 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
Dec 04 Javascript
Javscript调用iframe框架页面中函数的方法
Nov 01 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
如何处理JSON中的特殊字符
Nov 30 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
Jan 19 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
Feb 09 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
AngularJS 仿微信图片手势缩放的实例
Sep 28 Javascript
解决vue 子组件修改父组件传来的props值报错问题
Nov 09 Javascript
vue实现购物车列表
Jun 30 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
php对二维数组进行排序的简单实例
2013/12/19 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php实现微信模板消息推送
2018/03/30 PHP
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python中的类与对象之描述符详解
2015/03/27 Python
python中hashlib模块用法示例
2017/10/30 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
介绍下static、final、abstract区别
2015/01/30 面试题
平面设计师的工作职责
2013/11/21 职场文书
仓库文员岗位职责
2014/04/06 职场文书
公司节能减排倡议书
2014/05/14 职场文书
跑操口号
2014/06/12 职场文书
应届生找工作求职信
2014/06/24 职场文书
社会实践活动总结范文
2014/07/03 职场文书
工作报告范文
2019/06/20 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python