使用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 相关文章推荐
Mootools 1.2 手风琴(Accordion)教程
Sep 15 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
Jul 17 Javascript
基于jquery实现在线选座订座之影院篇
Aug 24 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
js实现消息滚动效果
Jan 18 Javascript
微信小程序 出现47001 data format error原因解决办法
Mar 10 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
Jun 01 Javascript
详解vue前后台数据交互vue-resource文档
Jul 19 Javascript
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
使用vuex解决刷新页面state数据消失的问题记录
May 08 Javascript
如何测量vue应用运行时的性能
Jun 21 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第一次无法获取cookie问题处理
2014/12/15 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
2013/08/06 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python之reload流程实例代码解析
2018/01/29 Python
PyCharm代码格式调整方法
2018/05/23 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
Django 拆分model和view的实现方法
2019/08/16 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
盛大笔试题
2016/11/05 面试题
成考报名单位证明范本
2014/01/16 职场文书
运动会致辞稿50字
2014/02/04 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
核心价值观演讲稿
2014/05/13 职场文书
幼儿园元旦主持词
2015/07/06 职场文书