使用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 定时器调用传递参数的方法
Nov 12 Javascript
javascript中键盘事件用法实例分析
Jan 30 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
Jun 18 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
Aug 19 Javascript
angular ng-repeat数组中的数组实例
Feb 18 Javascript
基于vue2.0实现简单轮播图
Nov 27 Javascript
JavaScript面向对象程序设计创建对象的方法分析
Aug 13 Javascript
如何提升vue.js中大型数据的性能
Jun 21 Javascript
简述vue-cli中chainWebpack的使用方法
Jul 30 Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
php foreach如何跳出两层循环(详解)
2016/11/05 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
详解Vue之事件处理
2020/07/10 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
在Python中使用模块的教程
2015/04/27 Python
解析Python中while true的使用
2015/10/13 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
毕业自我评价范文
2013/11/17 职场文书
大学毕业自我评价
2014/02/02 职场文书
人事专员职责
2014/02/22 职场文书
师德师风的心得体会
2014/09/02 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
2016春节放假通知范文
2015/08/18 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python