仿淘宝UED导航菜单

简介:
昨天在 淘宝UED网站上看到导航菜单很不错,于是自己动手写了一个。

      效果如下:

   

       顺便做了一种变体,实际上只是改变了CSS和一点HTML而已:


   

      代码如下:

复制代码
var  SlideNavi  =  Class.create({
    initialize:
function (naviItems,currentClassName,slider){
        
var  self  =   this ;
        
this .naviItems  =  naviItems;
        
this .currentClassName  =  currentClassName;
        
this .slider  =  slider;
        
        
this .currentIndex  =   0 ;
        
var  currentTab  =   function (){
            
return  self.naviItems[self.currentIndex];
        }
        
this .timeInterval  =   new  Object();
        
var  getStep  =   function (target,current){
            
var  step  =  (target  -  current) / 5;
             if (Math.abs(step) < 1   &&  step  !=   0 ){
                step 
=  (target - current) > 0 ? 1 : - 1 ;
            }
            
return  Math.round(step);
        }
        
var  tabHover  =   function (item){
            
// 更改slider的位置和长短
            clearInterval(self.timeInterval);
            
var  initLeft  =  parseInt(self.slider.getStyle( " left " ));
            
var  initRight  =  initLeft  +  self.slider.getWidth();
            
            
var  targetLeft  =  parseInt(item.positionedOffset().left);
            
var  targetRight  =  targetLeft  +  item.getWidth();
            
            
if (initLeft  ==  targetLeft)
                
return ;
                
            
var  leftToRight  =   true ;
            
if (initLeft  >  targetLeft)
                leftToRight 
=   false ;
            
if (leftToRight){
                newTargetLeft 
=  targetLeft  +  Math.round((targetLeft  -  initLeft)  *   0.1 );
                newTargetRight 
=  targetRight  +  Math.round((targetRight  -  initRight)  *   0.05 );
            }
else {
                newTargetLeft 
=  targetLeft  +  Math.round((targetLeft  -  initLeft)  *   0.05 );
                newTargetRight 
=  targetRight  +  Math.round((targetRight  -  initRight)  *   0.1 );
            }
            
            
function  slide(){
                
var  stepLeft  =  getStep(newTargetLeft,initLeft);
                
var  stepRight  =  getStep(newTargetRight,initRight);
                
if (stepLeft  !=   0 ){
                    initLeft 
+=  stepLeft;
                }
                
if (stepRight  !=   0 ){
                    initRight 
+=  stepRight;
                }
                self.slider.setStyle({
                    left:initLeft 
+   " px " ,
                    width:initRight 
-  initLeft  +   " px "
                });
                
if (stepLeft  ==   0   &&  stepRight  ==   0 ){
                    
function  moveBack(){
                        
var  newStepLeft  =  getStep(targetLeft,newTargetLeft);
                        
var  newStepRight  =  getStep(targetRight,newTargetRight);
                        
if (newStepLeft  !=   0 ){
                            newTargetLeft 
+=  newStepLeft;
                        }
                        
if (newStepRight  !=   0 ){
                            newTargetRight 
+=  newStepRight;
                        }
                        self.slider.setStyle({
                            left:newTargetLeft 
+   " px " ,
                            width:newTargetRight 
-  newTargetLeft  +   " px "
                        });
                        
if (newStepLeft  ==   0   &&  newStepRight  ==   0 )
                            clearInterval(self.timeInterval);
                    }
                    clearInterval(self.timeInterval);
                    self.timeInterval 
=  setInterval(moveBack, 10 );
                    
                }
            }
            self.timeInterval 
=  setInterval(slide, 10 );
        }
        
var  changeTab  =   function (item){
            
if (item  !=  currentTab()){
                currentTab().removeClassName(self.currentClassName);
                item.addClassName(self.currentClassName);
                self.currentIndex 
=  item.index;
            }
            tabHover(item);
        }
        
var  tabBack  =   function (event){
            tabHover(currentTab());
        }
        changeTab(currentTab());
        
this .naviItems.each( function (item,index){
            item.index 
=  index;
            item.observe(
" mouseover " ,tabHover.bind(item,item));
            item.observe(
" mouseout " ,tabBack);
            item.firstDescendant().observe(
" click " ,changeTab.bind(item,item));
        });
    }
});
复制代码

      基本原理还是很简单,看代码就能明白,但是为了达到缓冲效果还是有一点麻烦,首先要判断slider向左还是向右滑动,根据不同的方向来决定slider的left和width属性,然后还要往回移动,这个就需要再用一次setInterval就可以达到效果。出于学习,我还是使用了prototype1.6。

      点此下载示例

分类:  Javascript

本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/archive/2009/06/25/1510798.html,如需转载请自行联系原作者
相关文章
|
前端开发 JavaScript
HTML+CSS+JS仿京东购物车页面动态效果
HTML+CSS+JS仿京东购物车页面动态效果
152 0
|
小程序 JavaScript 前端开发
微信小程序 |从零实现酷炫纸质翻页效果
微信小程序 |从零实现酷炫纸质翻页效果
1890 0
微信小程序 |从零实现酷炫纸质翻页效果
重磅!高颜值好看的登录页面(附源码)
重磅!高颜值好看的登录页面(附源码)
|
10月前
|
前端开发
移动端开发——京东首页制作(流式布局)
移动端开发——京东首页制作(流式布局)
|
小程序
微信小程序项目实例——今日美食
微信小程序项目实例——今日美食
Banner——第四阶段考核——仿海尔商城网页
Banner——第四阶段考核——仿海尔商城网页
56 0
|
前端开发
移动端支付界面制作(小兔鲜项目)
移动端支付界面制作(小兔鲜项目)
204 0
移动端支付界面制作(小兔鲜项目)
|
移动开发 Android开发 iOS开发
html5直播实例|h5仿陌陌、仿火山小视频
这段时间直播、小视频比较火,于是空余时间利用h5开发的仿陌陌、抖音、火山小视频项目,使用到了html5+css3+jQuery+iscroll+swiper+wlsPop+wcMsgTips等技术架构开发,界面功能效果挺不错哒!!!                
4583 0
|
JavaScript 前端开发
仿抖音短视频系统源码,点击实现波纹效果
仿抖音短视频系统源码,点击实现波纹效果
1859 0
仿今日头条项目架构
仿今日头条项目架构 (一)—— ios11导航栏和tabBar层级仿今日头条项目架构 (二)—— 项目主架构的搭建仿今日头条项目架构 (三)—— 导航栏的自定义实现仿今日头条项目架构 (四)—— 首页父子控制器频道切换的集成 ...
1582 0