<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>groupList demo</title> <script type='text/javascript' src='http://cdn.staticfile.org/jquery/1.11.1/jquery.js'></script> <style type='text/css'>
dl dt{background:#ccc;padding:5px;}
dl li{padding:5px;list-style: none;}
p{height:100px;}
html,body{margin:0;padding:0;}
</style> <script type='text/javascript'>//<![CDATA[
$(function(){
//$('dl').groupList(); //相对窗口顶部
$('dl').groupList(true);
});
$.fn.groupList = function(selfScroll){
var list = this;
var listTopOffset = list.offset().top;
var titleHeight = $(list).find('dt:first').height(); var currentContext = selfScroll ? list : window;
if(selfScroll){
list.css({
'height':$(window).height() - listTopOffset,
'overflow':'auto'
});
}
$(currentContext).on('scroll',function(){
if($(currentContext).scrollTop()-(selfScroll ? 0 : listTopOffset) < titleHeight){
clearFixed();
}else{
var lis = list.find('li');
for(var i = 0, len = lis.length ; i < len ; i++){
if(isOnSight(lis[i])){
clearFixed().filter('.clone').remove();
lis.eq(i).parent().parent().prev().clone(true).addClass('clone').css({
'top': selfScroll ? listTopOffset : 0,
'position':'fixed',
'width':'100%'
}).appendTo(list);
break;
}
}
}
});
var isOnSight = function(item){
return selfScroll ? listTopOffset < $(item).offset().top + $(item).outerHeight() : $(currentContext).scrollTop() < $(item).offset().top + $(item).outerHeight();
}
var clearFixed = function(){
return $(list).find('dt').css({
'position':''
});
}
}
//]]> </script> </head>
<body>
<p>ale</p>
<dl>
<dt>A</dt>
<dd>
<ul>
<li>abandon</li>
<li>abnormal</li>
<li>abstinence</li>
<li>abort</li>
<li>abortive</li>
<li>abeyance</li>
<li>abscond</li>
<li>absolve</li>
<li>abrogate</li>
<li>about</li>
<li>abandon</li>
<li>abnormal</li>
<li>abstinence</li>
<li>abort</li>
<li>abortive</li>
<li>abeyance</li>
<li>abscond</li>
<li>absolve</li>
<li>abrogate</li>
<li id='check'>about</li>
<li>abandon</li>
<li>abnormal</li>
<li>abstinence</li>
<li>abort</li>
<li>abortive</li>
<li>abeyance</li>
<li>abscond</li>
<li>absolve</li>
<li>abrogate</li>
</ul>
</dd>
<dt>B</dt>
<dd>
<ul>
<li>banana</li>
<li>blue</li>
<li>background</li>
<li>backward</li>
<li>bacon</li>
<li>bacteria</li>
<li>baggage</li>
<li>balance</li>
<li>banana</li>
<li>blue</li>
<li>background</li>
<li>backward</li>
<li>bacon</li>
<li>bacteria</li>
<li>baggage</li>
<li>balance</li>
<li>banana</li>
<li>blue</li>
<li>background</li>
<li>backward</li>
<li>bacon</li>
<li>bacteria</li>
<li>baggage</li>
<li>balance</li>
</ul>
</dd>
<dt>C</dt>
<dd>
<ul>
<li>banana</li>
<li>blue</li>
<li>background</li>
<li>backward</li>
<li>bacon</li>
<li>bacteria</li>
<li>baggage</li>
<li>balance</li>
<li>banana</li>
<li>blue</li>
<li>background</li>
<li>backward</li>
<li>bacon</li>
<li>bacteria</li>
<li>baggage</li>
<li>balance</li>
<li>banana</li>
<li>blue</li>
<li>background</li>
<li>backward</li>
<li>bacon</li>
<li>bacteria</li>
<li>baggage</li>
<li>balance</li>
<li>blue</li>
<li>background</li>
<li>backward</li>
<li>bacon</li>
<li>bacteria</li>
<li>baggage</li>
<li>balance</li>
</ul>
</dd>
</dl> </body> </html>

js版iphone通讯录分组列表效果的更多相关文章

  1. 鸿蒙js开发7 鸿蒙分组列表和弹出menu菜单

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口]目录:1.鸿蒙视图效果2.js业务数据和事件3.页面视图代码4.跳转页面后的视图层5.js业务逻辑部分6.<鸿蒙js开发& ...

  2. Web版RSS阅读器(二)——使用dTree树形加载rss订阅分组列表

    在上一边博客<Web版RSS阅读器(一)——dom4j读取xml(opml)文件>中已经讲过如何读取rss订阅文件了.这次就把订阅的文件读取到页面上,使用树形结构进行加载显示. 不打算使用 ...

  3. js简单 图片版时钟,带翻转效果

    js简单 图片版时钟,带翻转效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  4. [WP8.1UI控件编程]SemanticZoom控件实现分组列表

    11.1.5 SemanticZoom实现分组列表 SemanticZoom控件可以让用户实现一种更加高级的列表,这种列表可以对列表的项目进行分组,同时这个SemanticZoom控件会提供两个具有相 ...

  5. 史上最易懂——ReactNative分组列表SectionList使用详情及示例详解

    React Native系列 <逻辑性最强的React Native环境搭建与调试> <ReactNative开发工具有这一篇足矣> <解决React Native un ...

  6. 原生js版分页插件

    之前我在自己的博客里发表了一篇用angularJs自定义指令实现的分页插件,今天简单改造了一下,改成了原生JavaScript版本的分页插件,可以自定义一些简单配置,特此记录下来.如有不足之处,欢迎指 ...

  7. 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法

    前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的不支持多音字,有的不支持声调,有的字典文件太大,还比如有时候我仅仅是需要获取汉字拼音首字母却要引入200kb的字 ...

  8. Slip.js – 在触摸屏上实现列表的滑动排序功能

    Slip.js 是一个很小的 JavaScript 库,用于实现对触摸屏的互动 Swipe 和对元素重新排序列表(Reordering).Slip.js 没有任何的依赖,你可以通过自定义 DOM 事件 ...

  9. 常见排序算法(JS版)

    常见排序算法(JS版)包括: 内置排序,冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归 & 堆栈),归并排序,堆排序,以及分析每种排序算法的执行时间. index.html <! ...

随机推荐

  1. 无线wifi-PJ-之在开启WPS下使用reaver

    PJ简单解释: PIN码分前4和后4,先破前4只有最多一万个组合,破后4中的前3只有一千个组 合,一共就是一万一千个密码组合. 10的4次方+10的3次方=11000个密码组合. 当reaver确定前 ...

  2. buffer busy wait

    什么是buffer busy wait? A session that reads or modifies a buffer in the SGA must first acquire the cac ...

  3. 使用定制的ArrayAdapter制作ListView的Items(翻译)

    Translated by:AcerWang    原文出自:customizing-android-listview-items-with-custom-arrayadapter  背景介绍 对于现 ...

  4. [置顶] 如何更改CSDN博客高亮代码皮肤的样式,使博客看起来更有范(推荐)

    由于本人写博客的时候,也没有配置博客的相关属性,因此贴出来的代码块都是CSDN默认的,因此代码背景色都是白色的,如下所示: 但是本人在浏览他人博客的时候,发现有些博客的代码块看起来比较有范,整个代码库 ...

  5. PHP的输出缓冲区

    什么是缓冲区?简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料.其实缓冲区最本质的作用就是,协调 ...

  6. 【IIS小技巧】将IIS Express改成可以通过ip地址访问

    通过浏览器访问的是localhost,如果通过手机访问则需要用ip地址,所以要修改IIS Express的配置,允许通过ip地址访问. IIS Express的配置文件默认在C:\Users\User ...

  7. 一个安全测试的CheckList

    转自:http://hi.baidu.com/dontcry/item/90c2bc466558c217886d1075 不登录系统,直接输入登录后的页面的URL是否可以访问: 不登录系统,直接输入下 ...

  8. 二、Solr安装(Tomcat)

    安装环境 Windows 7 64bit Apache-tomcat-8.0.9-windows-x64 Solr-4.9.0 JDK 1.8.0_05 64bit 安装步骤 Tomcat和JDk的安 ...

  9. Java基础知识强化49:10个实用的但偏执的Java编程技术

    1. 将String字符串放在最前面 为了防止偶发性的NullPointerException 异常,我们通常将String放置在equals()函数的左边来实现字符串比较,如下代码: // Bad ...

  10. rhel Linux系统yum的配置

    yum是一个很方便的linux系统软件管理工具,但是很多新手还是不会配置yum,下面详细的介绍下yum的配置方法,其实很简单. 1.首先确保系统ISO镜像已经成功挂载,可以用df -h命令查看.2.创 ...