zoukankan      html  css  js  c++  java
  • javascript-电话薄小功能

    上代码:

    <style>
    	*{ margin:0 ; padding: 0;}
    	.phrase_wrap,
    	.phrase_list{ 
    		 200px;
    		height: 200px;		
    	}
    	.phrase_wrap{
    		position:relative;
    		overflow: hidden;
    		margin: 20px auto;
    	}
    	.phrase_list{
    		overflow:auto;		
    	}
    	.phrase_panel,
    	.phrase_list dt{
    		padding: 0 4px;
    		height: 24px;
    		background:#066;
    		color: #fff;
    		font: bold 14px/24px SimSun;
    	}
    	.phrase_panel{
    		 175px;
    		position:absolute;
    		
    		
    		display: none;
    	}
    </style>
    </head>
    
    <body>
    
    <div class="phrase_wrap" id="phrase_wrap">
    	<div class="phrase_panel" id="phrase_panel"></div>
    	<dl id="phrase_list" class="phrase_list">
        	<dt>A</dt>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dt>B</dt>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dt>C</dt>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dt>D</dt>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dt>A</dt>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dd>a1</dd>
            <dt>B</dt>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dd>b2</dd>
            <dt>C</dt>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dd>c3</dd>
            <dt>D</dt>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
            <dd>d4</dd>
        </dl>   
    </div>
    
    <script>
    	/**
    		实现滚动下面条码的时候,对应的导航标题,在顶端显示。
    		分析:
    			1、首先要得到所有标题列表的坐标。
    			2、设置显示面板的内容。
    		步骤:
    			1、获取标题列表集合,并获取对应的坐标值。
    			2、设置显示面板内容并记录当前列表集合的索引。
    	*/
    	
    	/**
    		实现滚动下面条码的时候,对应的导航标题,在顶端显示。
    		分析:
    			1、首先要得到所有标题列表的坐标。
    			2、设置显示面板的内容。
    		步骤:
    			1、获取标题列表集合,并获取对应的坐标值。
    			
    			var phraseHeadList=[]
    			var phraseHead={title:'',x:0,y:0}//标题,坐标
    			
    			2、设置显示面板内容并记录当前列表集合的索引。
    			var phrasePanel={title:'',curHeadIndex:0};
    	*/
    	
    	/**
    		实现滚动下面条码的时候,对应的导航标题,在顶端显示。
    		分析:
    			1、首先要得到所有标题列表的坐标。
    			2、设置显示面板的内容。
    		步骤:
    			1、获取标题列表集合,并获取对应的坐标值。
    			
    			var phraseHeadList=[]
    			var phraseHead={title:'',x:0,y:0}//标题,坐标
    			
    			2、设置显示面板内容并记录当前列表集合的索引。
    			var phrasePanel={title:'',curHeadIndex:0};
    			
    			3、定位显示面板,并显示当前的标题
    			setPanel(index);
    	*/
    	//获取标题列表集合,并获取对应的坐标值。
    	var phraseList=document.getElementById("phrase_list");
    	var phraseListTop=phraseList.offsetTop;
    	var dts=phraseList.getElementsByTagName('dt');
    	var phraseHeadList=[];
    	var phraseHead={title:'',x:0,y:0}//标题,坐标
    	
    	for(var i=0,len=dts.length;i<len;i++){
    		phraseHead={
    			title:dts[i].innerHTML,
    			x:dts[i].offsetLeft,
    			y:dts[i].offsetTop-phraseListTop
    		}	
    		phraseHeadList.push(phraseHead);
    	}
    	
    	//设置显示面板内容并记录当前列表集合的索引。
    	var phrasePanel=document.getElementById('phrase_panel')
    
    	//监听
    	var phraseWrap=document.getElementById("phrase_wrap");
    	phraseList.onscroll=function(e){
    		var scrollTop=this.scrollTop;
    
    		var idx=getPhraseHeadIndex(scrollTop);
    		var nextIdx=idx+1;
    		var len=phraseHeadList.length;
    		//后一个的值和探测值比较
    		var probeH=dts[0].offsetHeight;		
    		var diffTop=phraseHeadList[nextIdx].y-scrollTop;
    		if(diffTop<probeH){
    			phrasePanel.style.top=diffTop-probeH+'px';			
    		}
    		setPanel(idx);
    		//纠错
    
    		
    	}
    	//搜索获取当前索引
    	function getPhraseHeadIndex(top){
    		var idx=0;		
    		for(var i=0,len=phraseHeadList.length;i<len;i++){			
    			if(phraseHeadList[i].y<top){
    				idx=i;
    			}
    			if(phraseHeadList[i].y>top){
    				break;
    			}
    		}
    		return idx;
    	}
    	//设置浮动条
    	function setPanel(index){
    		if(phrasePanel.index==index)return;
    		phrasePanel.index=index;
    		phrasePanel.style.display='block';
    		phrasePanel.style.top=0;				
    		phrasePanel.innerHTML=phraseHeadList[index].title	
    	}
    	
    	//初始化
    	setPanel(0)
    	
    </script>
    

     效果:

  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/wengxuesong/p/3990235.html
Copyright © 2011-2022 走看看