`

javascript + css 利用div的scroll属性让TAB动感十足

阅读更多

做了一个动感十足的TAB不敢独占,写出来大家共享,大家可以到宝宝孕历首页看看效果。

 

其实现是通过js控制div的scrollLeft属性来实现的,tab分成两个部分tab头部分和tab体部分,tab体是一个很宽的层,此div的overflow被设置成hidden,在鼠标挪动到不同的tab标签上时,逐渐修改tab体的scrollLeft属性。

 

实现的js代码如下:

/*scroll*/
var Scroller = Class.create();
Scroller.prototype = {
    initialize:function(options){
        this.commandsWrapId = options.commandsWrapId;
        this.scrollWrapId = options.scrollWrapId;
        this.sectionWidth = options.sectionWidth;
        this.step = options.step;
    },
    scrollTo : function(ev){
        if(!ev)ev = window.event;
        var otriger = getSrcElement(ev);
        while(otriger && otriger.tagName != 'LI'){
            otriger = otriger.parentNode;
        }
        Scroller.runningInstance = otriger.scroller;
        var instance = otriger.scroller;
        for(var i=0;i<instance.triggers.length;i++){
            instance.triggers[i].className = 'command unselected';
        }
        otriger.className = 'command selected';
        
        var index = otriger.scrollIndex;
        if(instance.interval)window.clearInterval(instance.interval);
        instance.targetLeft = index * instance.sectionWidth;
        //计算一个step,要求在500ms内转到指定位置
        instance.step = Math.abs((instance.targetLeft - instance.wrap.scrollLeft)/25);
        instance.interval = window.setInterval(instance.scrollByStep,10);
    },
    scrollByStep : function(){
        var i = Scroller.runningInstance;
        var current = parseInt(i.wrap.scrollLeft);
        if(current > i.targetLeft){
            if(current - i.targetLeft < i.step)i.wrap.scrollLeft = i.targetLeft;
            else i.wrap.scrollLeft = i.wrap.scrollLeft - i.step ;
        }else if(current < i.targetLeft){
            if(i.targetLeft - current < i.step)i.wrap.scrollLeft = i.targetLeft;
            else i.wrap.scrollLeft = i.wrap.scrollLeft + i.step;
        }else{
             if(i.interval){
                window.clearInterval(i.interval);
             }
        }
    },
    bindEvent : function(scroller){
        scroller.wrap = $id(scroller.scrollWrapId);
        var ocommands = $id(scroller.commandsWrapId);
        var olis = $tagsC('LI','command',ocommands);
        scroller.triggers = olis;
        if(olis){
            for(var i=0;i<olis.length;i++){
                olis[i].scrollIndex = i;
                olis[i].scroller = scroller;
                addEvent(olis[i],'mouseover',scroller.scrollTo);
            }
        }
    }
};
/*endscroll*/

 

需要在页面上调用的css和js代码如下:
<style tpe="text/css">
.scrollCommands{clear:both;width:600px;}
.scrollCommands UL{list-item:none;margin:0px;padding:0px;width:600px;overflow:auto;zoom:1;clear:both}
.scrollCommands UL LI{height:20px;line-height:20px;margin:0px;padding:0px;display:block;float:left;}
.scrollCommands UL LI.command{width:65px;border-top:1px solid #eee;border-left:1px solid #eee;border-right:1px solid #eee;text-align:center}
.scrollCommands UL LI.selected{border-bottom:1px solid #fff;background:#fff;}
.scrollCommands UL LI.unselected{border-bottom:1px solid #f0f0f0;background:#f0f0f0;}
.scrollCommands UL LI.sep{width:10px;border-top:1px solid #fff;border-left:1px solid #fff;border-right:0px solid #fff;border-bottom:1px solid #eee;}
.scrollCommands A{font-size:12px;}
#divScrollWrap{width:600px;overflow:hidden;height:200px;padding:0px;clear:both;margin-bottom:10px;border-bottom:1px solid #eee;border-left:1px solid #eee;border-right:1px solid #eee;}
.scrollSection{width:600px;overflow:hidden;height:200px;background:#fff;float:left}
.scrollSection H3{font-size:14px;display:block;border-bottom:1px solid #f0f0f0;font-weight:normal;margin:0px 0px 5px 0px;padding:2px 2px 2px 10px;}
.scrollSection UL{list-style:none;line-height:20px;padding:0px 0px 0px 6px;margin:0px;}
.scrollSection LI{margin:0px;padding:0px 0px 0px 8px;line-height:20px;background:url(/imgs/punyarrowright.gif) no-repeat left 7px;height:20px;overflow:hidden;}
.w280{width:280px;}
</style>
<script type="text/javascript">
addLoadEvent(function(){
var scroller = new Scroller({commandsWrapId:'divScrollCommands',scrollWrapId:'divScrollWrap',sectionWidth:600,step:10});
scroller.bindEvent(scroller);});
</script>
 
欢迎大家点评,指点。
分享到:
评论
7 楼 gongmingwind 2010-01-28  
希望能提供附件下载,公司访问不了.com网站,以便学习和交流
6 楼 D-tune 2009-11-19  
不错,支持一个。
js和css代码可以进一步简化的哦,建议lz基于jquery做成插件,这样以后的可维护性和扩展性更好。

另外组件的说明希望更详细点,易读点。
5 楼 yukaizhao 2009-06-25  
在不同的tab之间切换就会滑动了
4 楼 tomcatlee 2009-06-20  
滑动的效果?哪里?我怎么没有看到啊?
3 楼 yukaizhao 2009-05-11  
滑动的速度是计算出来的,在500ms内滑动到目标位置。
2 楼 lucane 2009-05-08  
不错
确实是动感十足
滑动的感觉有点快了。。。
1 楼 yukaizhao 2009-05-08  
需要说明的是文中的代码是关键 实现代码,有一些公用的方法没有给出。

相关推荐

    DIV+CSS布局技巧整理集合

    ### DIV+CSS布局技巧整理集合 #### 命名规范 在进行网页设计时,合理的命名不仅能够提高代码的可读性,还能帮助其他开发者更好地理解网页结构。以下是一些常用的命名规范: - **页头**:`header` - **登录条**:`...

    jQuery实现定位滚动tab选项卡效果.zip

    在网页设计中,Tab选项卡是一种常见的用户界面元素,它能有效地组织和展示大量信息,让用户在有限的空间内浏览多个内容板块。jQuery是一款强大的JavaScript库,提供了丰富的功能和简便的API,使得实现复杂的交互效果...

    JavaScript实现的可暂定滚动的TAB标签代码

    每个TAB按钮对应一个内容容器,通常使用`&lt;div&gt;`元素来表示。我们可以用CSS来美化这些元素,如设置背景色、边框、字体样式等。 接着,我们使用JavaScript来处理用户交互。这包括监听TAB按钮的点击事件,以及控制内容...

    tab增删选项卡

    tabtab增删选项卡&lt;div class="wrap-top"&gt; &lt;div class="tab-left"&gt;<<&lt;/div&gt; &lt;div class="tab-right"&gt;>>&lt;/div&gt; &lt;div class="cont-tab"&gt; &lt;div class="cont-scroll"&gt; &lt;span&gt;HTML&lt;/span&gt; [removed]void(0)"&gt;...

    竖向tab标签支持上下翻滚

    传统的Tab标签通常是横向排列,但随着移动设备和响应式设计的普及,竖向(纵向)Tab标签也开始受到关注,特别是对于屏幕空间有限的情况,竖向布局能更有效地利用垂直空间。本文将详细介绍如何实现“竖向tab标签支持...

    jQuery定位滚动tab选项卡特效.zip

    在这个“jQuery定位滚动tab选项卡特效”项目中,我们将探讨如何利用jQuery和相关的HTML、CSS技术实现一个动态滚动的选项卡效果。 首先,让我们了解核心组件: 1. **HTML 结构**: - 选项卡容器:通常是一个div,...

    原生js tab代码选项卡里面按钮控制图片滚动选项卡切换

    这可以通过修改CSS过渡属性或者使用JavaScript库如GSAP来实现。 6. **响应式设计**:考虑到移动设备,确保选项卡和图片滚动在不同屏幕尺寸下都能正常工作,可以利用媒体查询(media queries)进行布局调整。 通过...

    TAB-左侧滚动菜单

    3. **滚动效果**:为了让菜单能够滚动,可以利用CSS的`overflow`属性。将`overflow-y`设置为`scroll`,当菜单项超出容器高度时,会出现滚动条。若想实现无滚动条但依然能滚动的效果,可以使用CSS的`transform`属性,...

    jQuery点击TAB导航菜单页面全屏滚动切换代码

    "jQuery点击TAB导航菜单页面全屏滚动切换代码" 提供了一种方法,利用jQuery库实现动态的页面导航和全屏滚动效果,使用户在浏览网站时能享受到流畅的体验。下面将详细介绍这个功能的实现原理和关键知识点。 首先,...

    JQ向上滑动切换Tab选项卡.zip

    在创建Tab选项卡时,我们可以使用`&lt;ul&gt;`和`&lt;li&gt;`来构建Tab导航,`&lt;div&gt;`来承载每个Tab对应的内容区域。 CSS则用于美化和布局页面元素。我们可以为Tab导航设置样式,例如背景颜色、字体、边框等。同时,为了实现向上...

    可暂定滚动的TAB标签代码

    Tab标签的设计通常基于前端框架,如Bootstrap、React、Vue或Angular等,或者是自定义的JavaScript和CSS实现。下面,我们将详细讨论与这个主题相关的几个核心知识点: 1. **HTML结构**:Tab标签的HTML结构通常包括一...

    基于javascript实现tab选项卡切换特效调试笔记

    本文介绍了使用JavaScript实现Tab选项卡切换特效的调试过程,这种方法在Web前端开发中很常见,通过点击不同的标签来切换内容区域的显示,从而达到页面内容的快速跳转和切换。 首先,文章讲解了实现Tab选项卡切换...

    h5单页面上拉刷新下拉加载

    本项目主要关注于实现这样的功能,结合了JavaScript和CSS技术,同时应用了tab选项卡的设计,使得用户能够在不同的内容区域进行上拉刷新和下拉加载。 1. **上拉刷新(Pull-to-Refresh)**: 上拉刷新是指当用户滚动...

    jquery编写Tab选项卡滚动导航切换特效

    在本教程中,我们将探讨如何使用jQuery来实现一个Tab选项卡滚动导航切换特效。这个功能在许多现代网页设计中非常常见,它不仅提供了良好的用户体验,还可以有效地组织和展示大量内容。 首先,我们要了解jQuery库的...

    css标准+web标准

    CSS标准定义了一系列规则和语法,让开发者能够精确地控制网页中的每一个元素,包括字体、颜色、间距、布局等等。 #### 四、具体Web组件及应用 接下来,我们将根据描述中的各个元素进行详细解读: 1. **页头...

    jQuery选项卡上下滚动切换图片异步加载选项卡

    首先,让我们理解这个特效的主要组成部分:选项卡、滚动按钮、图片异步加载和用户提示信息。 ### 选项卡与JQuery 选项卡是一种将大量信息组织成易于浏览和导航的界面元素。在JavaScript库中,jQuery是最常用的选择...

    vue滚动tab跟随切换效果

    在Vue.js中实现“滚动tab跟随切换效果”是一种常见的移动端交互设计,它可以提供更好的用户体验,让用户更容易地在多个内容区域之间导航。以下是如何利用Vue.js实现这个功能的详细步骤: 首先,我们需要创建一个Vue...

    107个常用Javascript语句

    ### 107个常用JavaScript语句解析 #### 1. `document.write("")` - **功能**:在页面上写入指定的内容。 - **应用场景**:适用于简单的测试或页面加载时输出信息。 - **示例代码**: ```javascript document....

    标签(Tabs)实现多页面切换

    可以考虑使用`overflow` CSS属性和`scroll`事件来实现。 **5. 优化与兼容性** 为了确保良好的用户体验,我们需要处理各种边缘情况,比如错误处理(如请求失败)、回退机制(如无网络时显示默认内容)以及浏览器...

    vue滚动插件better-scroll使用详解

    初始化Better Scroll时,你需要传递这个`.wrapper` 组件的DOM对象或其对应的CSS选择器。例如: ```javascript // 直接传递DOM对象 import BScroll from 'better-scroll' let wrapper = document.querySelector('....

Global site tag (gtag.js) - Google Analytics