使用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 textarea自动增高并隐藏滚动条
Dec 16 Javascript
终于解决了IE8不支持数组的indexOf方法
Apr 03 Javascript
jQuery读取和设定KindEditor值的方法
Nov 22 Javascript
jQuery中ajax的post()方法用法实例
Dec 26 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
Apr 30 Javascript
ECMAScript6轮播图实践知识总结
Aug 17 Javascript
使用Angular.js开发的注意事项
Oct 19 Javascript
详解angularjs利用ui-route异步加载组件
May 21 Javascript
微信小程序中button组件的边框设置的实例详解
Sep 27 Javascript
JS实现图片旋转动画效果封装与使用示例
Jul 09 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 Javascript
Vue中用JSON实现刷新界面不影响倒计时
Oct 26 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
PHP5 安装方法
2007/01/15 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
php curl发送请求实例方法
2019/08/01 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
原生js+css实现tab切换功能
2020/09/17 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
[00:10]神之谴戒
2019/03/06 DOTA
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
Python实现的字典值比较功能示例
2018/01/08 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
大学毕业感言100字
2014/02/03 职场文书
社区低保工作总结2015
2015/07/23 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
如何使用php生成zip压缩包
2021/04/21 PHP
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
python内置模块之上下文管理contextlib
2022/06/14 Python