使用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 相关文章推荐
给Function做的OOP扩展
May 07 Javascript
jQuery中live方法的重复绑定说明
Oct 21 Javascript
常用jQuery选择器总结
Jul 11 Javascript
14个有用的Jquery技巧分享
Jan 08 Javascript
每天一篇javascript学习小结(Date对象)
Nov 13 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
Jun 10 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
webgl实现物体描边效果的方法介绍
Nov 27 Javascript
JS继承定义与使用方法简单示例
Feb 19 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的栏目导航程序
2006/10/09 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
Javascript浅谈之this
2013/12/17 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
python获取本地计算机名字的方法
2015/04/29 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
python3大文件解压和基本操作
2017/12/15 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
初三学习计划书范文
2014/04/30 职场文书
销售求职信范文
2014/05/26 职场文书
数学教育专业求职信
2014/07/22 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
小学远程教育工作总结
2015/08/13 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
Pygame Rect区域位置的使用(图文)
2021/11/17 Python
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android