使用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 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
基于jquery自己写tab滑动门(通用版)
Oct 30 Javascript
jquery中获取id值方法小结
Sep 22 Javascript
动态的9*9乘法表效果的实现代码
May 16 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
Dec 08 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
Aug 30 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
JS实现多物体运动的方法详解
Jan 23 Javascript
微信小程序rich-text富文本用法实例分析
May 20 Javascript
vue 实现根据data中的属性值来设置不同的样式
Aug 04 Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 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.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
python获取Linux发行版名称
2019/08/30 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
2014年纪检监察工作总结
2014/11/11 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
Python字符串格式化方式
2022/04/07 Python