使用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 相关文章推荐
Js四则运算函数代码
Jul 21 Javascript
简化版手机端照片预览组件
Apr 13 Javascript
每天一篇javascript学习小结(Date对象)
Nov 13 Javascript
JS实现的仿淘宝交易倒计时效果
Nov 27 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
js继承实现方法详解
Dec 16 Javascript
js获取当前周、上一周、下一周日期
Mar 19 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
Sep 14 Javascript
深入理解移动前端开发之viewport
Oct 19 Javascript
JS实现的tab页切换效果完整示例
Dec 18 Javascript
js中Array对象的常用遍历方法详解
Jan 17 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 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中的array数组类型分析说明
2010/07/27 PHP
PHP session会话的安全性分析
2011/09/08 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
手机端转换rem适应
2017/04/01 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
苹果美国官方商城:Apple美国
2016/08/24 全球购物
StubHub墨西哥:购买和出售您的门票
2016/09/17 全球购物
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
卫校毕业生自我鉴定
2013/10/31 职场文书
求职简历中个人的自我评价
2013/12/01 职场文书
集体婚礼证婚词
2014/01/13 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
小学工作总结2015
2015/05/04 职场文书