仿淘宝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仿京东购物车页面动态效果
174 0
|
小程序 JavaScript 前端开发
微信小程序 |从零实现酷炫纸质翻页效果
微信小程序 |从零实现酷炫纸质翻页效果
2039 0
微信小程序 |从零实现酷炫纸质翻页效果
重磅!高颜值好看的登录页面(附源码)
重磅!高颜值好看的登录页面(附源码)
|
11月前
|
前端开发
移动端开发——京东首页制作(流式布局)
移动端开发——京东首页制作(流式布局)
|
存储 容器
仿百度福袋红包界面
仿百度福袋红包界面
92 0
仿百度福袋红包界面
Banner——第四阶段考核——仿海尔商城网页
Banner——第四阶段考核——仿海尔商城网页
59 0
|
前端开发
移动端支付界面制作(小兔鲜项目)
移动端支付界面制作(小兔鲜项目)
211 0
移动端支付界面制作(小兔鲜项目)
|
移动开发 Android开发 iOS开发
html5直播实例|h5仿陌陌、仿火山小视频
这段时间直播、小视频比较火,于是空余时间利用h5开发的仿陌陌、抖音、火山小视频项目,使用到了html5+css3+jQuery+iscroll+swiper+wlsPop+wcMsgTips等技术架构开发,界面功能效果挺不错哒!!!                
4594 0
仿抖音“我的”界面设计图制作
最近在做一个仿抖音的APP(萌音)前一段时间将主页完成接下来打算做一下我的界面,然后今天就把设计图先做出来了,因为个人毕竟能力有限所以相对于抖音的界面我自己制作的界面做了一些改动 仿抖音“我的”界面设计图 附上psd源文件感兴趣的同学可以看看 个人博客https://myml666.
1847 0
|
JavaScript 前端开发
仿抖音短视频系统源码,点击实现波纹效果
仿抖音短视频系统源码,点击实现波纹效果
1862 0