仿淘宝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,如需转载请自行联系原作者
相关文章
|
数据采集 存储 数据挖掘
Python 爬虫实战之爬拼多多商品并做数据分析
Python爬虫可以用来抓取拼多多商品数据,并对这些数据进行数据分析。以下是一个简单的示例,演示如何使用Python爬取拼多多商品数据并进行数据分析。
|
域名解析 负载均衡 架构师
Nginx极简入门(六)配置Nginx负载均衡,提高系统并发性能!
前面讲了如何配置Nginx虚拟主机、如何配置反向代理。Nginx最主要的功能就是反向代理和负载均衡。今天要说的是如何配置nginx和tomcat实现反向代理。
Nginx极简入门(六)配置Nginx负载均衡,提高系统并发性能!
|
11月前
|
JavaScript 前端开发 API
Node.js 中的 WebSocket 底层实现
Node.js 中的 WebSocket 底层实现
212 0
|
机器学习/深度学习 数据挖掘 PyTorch
🚀PyTorch实战宝典:从数据分析小白到深度学习高手的飞跃之旅
【7月更文挑战第29天】在数据驱动的世界里, **PyTorch** 作为深度学习框架新星, 凭借其直观易用性和高效计算性能, 助力数据分析新手成为深度学习专家。首先, 掌握Pandas、Matplotlib等工具进行数据处理和可视化至关重要。接着, 安装配置PyTorch环境, 学习张量、自动求导等概念。通过构建简单线性回归模型, 如定义 `nn.Module` 类、设置损失函数和优化器, 进行训练和测试, 逐步过渡到复杂模型如CNN和RNN的应用。不断实践, 你将能熟练运用PyTorch解决实际问题。
223 1
|
开发框架 前端开发 JavaScript
若依怎样看开发文档,域名搜这个就行ruoyi.vip,建链接点击在线文档,有前端手册和后端手册,若依文档里有项目扩展,项目扩展有大量的开源的软件
若依怎样看开发文档,域名搜这个就行ruoyi.vip,建链接点击在线文档,有前端手册和后端手册,若依文档里有项目扩展,项目扩展有大量的开源的软件
|
前端开发 JavaScript 关系型数据库
前端网页手册(1)--基础学习
前端网页手册(1)--基础学习
94 1
|
JavaScript
Ant design vue 样式调整(包含导航栏、a-table表格、分页)
Ant design vue 样式调整(包含导航栏、a-table表格、分页)
1473 1
|
前端开发 程序员
前端的开发规范
前端的开发规范
1108 0
|
XML 设计模式 JavaScript
JVM第三讲:JVM 基础-字节码的增强技术详解
JVM第三讲:JVM 基础-字节码的增强技术详解
340 0
JVM第三讲:JVM 基础-字节码的增强技术详解
|
前端开发 JavaScript IDE
上市公司前端开发规范参考
上市公司前端开发规范参考

热门文章

最新文章