【Python之路】第十四篇--jQuery

jquery简介

1.jquery是什么       ☛ 参考用法

  • jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team

  • jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。

  • 它是轻量级的js(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。

  • jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documentsevents、实现动画效果,并且方便地为网站提供AJAX交互。

  • jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。

  • jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。

2.什么是jQuery对象?

  • jQuery 对象就是通过jQuery包装DOM对象后产生的对象。

  • jQuery 对象是 jQuery 独有的如果一个对象是 jQuery 对象那么它就可以使用 jQuery 里的方法: $(“#test”).html();

比如: 

$("#test").html()意思是指:获取IDtest的元素内的html代码。其中html()jQuery里的方法 

这段代码等同于用DOM实现代码: document.getElementById(" test ").innerHTML; 

  虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会报错

约定:如果获取的是 jQuery 对象那么要在变量前面加上$. 

var $variable = jQuery对象 

var variable = DOM对象 

 

二   寻找元素(重要的选择器和筛选器) 

2.1选择器

2.1.1 基本选择器

$("*")
$("#id")   
$(".class")  
$("element")  
$(".class,p,div")       //每一个选择器匹配到的元素合并后一起返回。

2.1.2 层级选择器

$(".outer div")            //匹配所有的后代元素
$("parent > child")        //匹配所有的子元素
$("prev + next")           //匹配所有紧接在 prev 元素后的 next 元素 
$("prev ~ siblings ")      //匹配 prev 元素之后的所有 siblings 元素(同级元素)

2.1.3 基本筛选器

$('li:first');    //获取第一个元素
$('li:last')      //最后一个元素

:not(selector)              //去除所有与给定选择器匹配的元素配的元素
$("input:not(:checked)")    //查找所有未选中的 input 元素

$("tr:even")     //索引为偶数的元素,从 0 开始
$("tr:odd")      //索引为奇数的元素,从 0 开始

$("tr:eq(1)")    //给定索引值的元素
$("tr:gt(0)")    //大于给定索引值的元素
$("tr:lt(2)")    //小于给定索引值的元素

$(":focus")      //当前获取焦点的元素
$(":animated")   //正在执行动画效果的元素

2.1.4 属性选择器

$("div[id]")
$('[id="div1"]')   
$("div[name!='new']")
$("div[name^='new']")
$("div[name&='new']")
$("div[name*='new']")

//复合:
$('["alex="sb"][id]')
$("div[id][name$='man']")

2.1.5 表单选择器

$(":input")      //匹配所有 input, textarea, select 和 button 元素
$(":text")       //所有的单行文本框
$(":password")   //所有密码框
$(":radio")      //所有单选按钮
$(":checkbox")   //所有复选框
$(":submit")     //所有提交按钮
$(":reset")      //所有重置按钮
$(":button")     //所有button按钮
$(":file")       //所有文件域
 
$("input:checked")    //所有选中的元素
$("select option:selected")    //select中所有选中的option元素

2.1.6 表单对象属性选择器

$(":enabled")        //匹配所有可用元素
$(":disabled")        //匹配所有不可用元素
$(":checked")        //匹配所有选中中元素
$(":selected")        //匹配所有选中的option元素

2.1.7 内容选择器

$(":contains(text)")  //匹配包含给定文本的元素
$(":empty")           //匹配所有不包含子元素或者文本的空元素
$(":parent")          //匹配含有子元素或者文本的元素
$(":has(selector)")   //匹配含有选择器所匹配的元素的元素

2.1.8 可见性选择器  

$(":hidden")        //匹配所有不可见元素,或者type为hidden的元素
$(":visible")       //匹配所有的可见元素

2.2筛选器

2.2.1 过滤

$("p").eq(0)       //当前操作中第N个jQuery对象,类似索引
$('li').first()    //第一个元素
$('li').last()     //最后一个元素
$(this).hasClass("test")    //元素是否含有某个特定的类,返回布尔值
$('li').has('ul')  //包含特定后代的元素

2.2.2 查找

$("div").children()      //div中的每个子元素,第一层
$("div").find("span")    //div中的包含的所有span元素,子子孙孙

$("p").next()          //紧邻p元素后的一个同辈元素
$("p").nextAll()         //p元素之后所有的同辈元素
$("#test").nextUntil("#test2")    //id为"#test"元素之后到id为'#test2'之间所有的同辈元素,掐头去尾

$("p").prev()            //紧邻p元素前的一个同辈元素
$("p").prevAll()         //p元素之前所有的同辈元素
$("#test").prevUntil("#test2")    //id为"#test"元素之前到id为'#test2'之间所有的同辈元素,掐头去尾

$("p").parent()          //每个p元素的父元素
$("p").parents()         //每个p元素的所有祖先元素,body,html
$("#test").parentsUntil("#test2")    //id为"#test"元素到id为'#test2'之间所有的父级元素,掐头去尾

$("div").siblings()      //所有的同辈元素,不包括自己

实例 左侧菜单 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
        <style>
            .menu{
                position: fixed;
                left: 0;
                top: 0;
                background-color: darkgray;
                width: 150px;
                height: 500px;
            }
            .menu .title{
                background-color: greenyellow;
                color: red;
                cursor: pointer;
            }
            .hide{
                display: none;
            }
            .option{
                background-color: wheat;
            }
        </style>
    <body>
        
        <div class="menu">
            <div class="item">
                <div class="title">菜单一</div>
                <div class="option">
                    <div>1111</div>
                    <div>1111</div>
                    <div>1111</div>
                </div>
            </div>
            
            <div class="item">
                <div class="title">菜单二</div>
                <div class="option hide">
                    <div>1111</div>
                    <div>1111</div>
                    <div>1111</div>
                </div>
            </div>
            
            <div class="item">
                <div class="title">菜单三</div>
                <div class="option hide">
                    <div>1111</div>
                    <div>1111</div>
                    <div>1111</div>
                </div>
            </div>
        </div>
        
        
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $('.title').click(function(){
                $(this).siblings().removeClass("hide")
                $(this).parent().siblings().children('.option').addClass('hide')
            })
        </script>
    </body>
</html>
demo

实例 tab切换

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            ul{
                list-style: none;
                padding: 0;
                margin: 0;
            }
            .title{
                background: #DDDDDD;
            }
            .clearfix:after{
                display: block;
                content: 'x';
                height: 0;
                visibility: hidden;
                clear: both;
            }
            ul li{
                background: blue;
                color: white;
                float: left;
                padding: 8px 10px;
            }
            .content{
                border: 1px solid #DDDDDD;
                min-height: 200px;
            }
            .active{
                background-color: white;
                color: #000000;
            }
            .dis-con{
                display: none;
            }
        </style>
    </head>
    <body>
        <div class="tab-menu">
            <div class="title clearfix">
                <ul>
                    <li  class="active" target='d1'>价格趋势</li>
                    <li  target='d2'  >市场分布</li>
                    <li  target='d3'  >其他</li>
                </ul>
            </div>
            
            <div class="content" id='content'>
                <div con='d1'>content1</div>
                <div class="dis-con" con='d2'>content2</div>
                <div class="dis-con" con='d3'>content3</div>
            </div>
        </div>
        
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $('.title ul li').click(function(){
                $(this).addClass('active').siblings().removeClass('active');
                var att = $(this).attr('target')
                $("div[con="+att+"]").removeClass('dis-con').siblings().addClass('dis-con')
            })
        </script>
    </body>
</html>
demo

三   操作元素(属性 CSS 和 文档处理)  

3.1 属性操作

3.1.1 基本属性操作

$("div").attr("id");            //返回文档中所有div的id属性值
$("div").attr("id","4");            //设置所有div的id属性
$("div").attr({'alex':'sb'})        //设置多个属性,字典形式
$("div").removeAttr("name");       //将文档中图像的src属性删除

$("input[type='checkbox']").prop("checked", true);    //选中复选框
$("input[type='checkbox']").prop("checked", false);
$("img").removeProp("src");       //删除img的src属性

3.1.2 CSS类操作

$("p").addClass("selected");      //为p元素加上 'selected' 类
$("p").removeClass("selected");    //从p元素中删除 'selected' 类
$("p").toggleClass("selected");    //如果存在就删除,否则就添加

3.1.3 HTML代码/本文/值

$('p').html();               //返回p元素的html内容
$("p").html("Hello <b>nick</b>!");  //设置p元素的html内容
$('p').text();               //返回p元素的文本内容
$("p").text("nick");           //设置p元素的文本内容
$("input").val();             //获取文本框中的值
$("input").val("nick");          //设置文本框中的内容

实例 编辑框正反选

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        
        <button onclick='selectAll()'>全选</button>
        <button onclick='cancel()'>取消</button>
        <button onclick='reverse()'>反选</button>
        <table border="1" width="100px">
            <thead>
                
            </thead>
            <tbody>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>1111</td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>2222</td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>3333</td>
                </tr>
                <tr>
                    <td><input type="checkbox" /></td>
                    <td>4444</td>
                </tr>
            </tbody>
        </table>
        
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            function selectAll(){
                $(":checkbox").prop('checked',true)
            }
            function cancel(){
                $(":checkbox").prop('checked',false)
            }
            function reverse(){
                $(":checkbox").each(function (){
                    if( $(this).prop('checked')){
                        $(this).prop('checked',false)
                    }else{
                        $(this).prop('checked',true)
                    }
                })
            }
        </script>
    </body>
</html>
demo

实例 模态对话框

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .shadow{
                position: fixed;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                background: rgba(0,0,0,.6);
                z-index: 10;
            }
            .infoedit{
                position: fixed;
                top: 50%;
                left: 50%;
                margin-left: -150px;
                margin-top: -150px;
                width: 300px;
                height: 300px;
                background-color: white;
                z-index: 20;
            }
            .hide{
                display: none;
            }
        </style>
        <script src="jquery-1.8.2.js"></script>
        <script>
            $(function(){
                $('[target=edit]').click(function(){
                    $('.shadow,.infoedit').removeClass('hide');
                    
                    var server_info = $(this).prevAll();
                    server_info.each(function(k,v){
                        var text = $(this).text();
                        var target = $(this).attr('target');
                        $('#'+target).val(text);
                    })
                })
                
                $('#cancelEdit').click(function(){
                    $('.infoedit :text').val('');
                    $('.shadow,.infoedit').addClass('hide');
                })
                
                $('#addInfo').click(function(){
                    $('.shadow,.infoedit').removeClass('hide');
                })
            })
        </script>
    </head>
    <body>
        <button id="addInfo">添加</button>
        <table border="1">
            <thead>
                <tr>
                    <th>服务器</th>
                    <th>ip地址</th>
                    <th>端口号</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td target='server'>c1.com</td>
                    <td target='ip'>10.1.1.1</td>
                    <td target='port'>8881</td>
                    <td target='edit'>编辑</td>
                </tr>
                <tr>
                    <td target='server'>c2.com</td>
                    <td target='ip'>10.1.1.2</td>
                    <td target='port'>8882</td>
                    <td target='edit'>编辑</td>
                </tr>
                <tr>
                    <td target='server'>c3.com</td>
                    <td target='ip'>10.1.1.3</td>
                    <td target='port'>8883</td>
                    <td target='edit'>编辑</td>
                </tr>
            </tbody>
        </table>
        
        <div class="shadow hide"></div>
        <div class="infoedit hide">
            <form action="" method="get">
                <p>服务器:
                    <input type="text" id='server' />
                </p>
                
                <p>ip地址:
                    <input type="text" id='ip' />
                </p>
                
                <p>端口号:
                    <input type="text" id='port' />
                </p>
                
                <input type="submit" value="提交" />
                <input type="button" value="取消" id='cancelEdit'/>
            </form>
        </div>
    </body>
</html>
demo

3.2 CSS操作

3.2.1 样式

$("p").css("color");          //访问查看p元素的color属性
$("p").css("color","red");    //设置p元素的color属性为red
$("p").css({ "color": "red", "background": "yellow" });    //设置多个属性要用{}字典形式

3.2.2 位置

$('p').offset()     //元素在当前视口的相对偏移,Object {top: 122, left: 260}
$('p').offset().top
$('p').offset().left
$("p").position()   //元素相对父元素的偏移,对可见元素有效,Object {top: 117, left: 250}

$(window).scrollTop()       //获取滚轮滑的高度
$(window).scrollLeft()      //获取滚轮滑的宽度
$(window).scrollTop('100')  //设置滚轮滑的高度为100

$(window).height()          //获取窗口的高度
$(document).height()        //获取文档的高度

3.2.3 尺寸

$("p").height();    //获取p元素的高度
$("p").width();     //获取p元素的宽度

$("p:first").innerHeight()    //获取第一个匹配元素内部区域高度(包括补白、不包括边框)
$("p:first").innerWidth()     //获取第一个匹配元素内部区域宽度(包括补白、不包括边框)

$("p:first").outerHeight()    //匹配元素外部高度(默认包括补白和边框)
$("p:first").outerWidth()     //匹配元素外部宽度(默认包括补白和边框)
$("p:first").outerHeight(true)    //为true时包括边距

实例 返回顶部

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .goTop{
                position: fixed;
                right: 10px;
                bottom: 10px;
                width: 40px;
                height: 40px;
                background-color: darkgray;
                text-align: center;
            }
            .hide{
                display: none;
            }
        </style>
        
    </head>
    <body>
        <div style="height: 1000px;"></div>
        
        <div class="goTop hide">返回顶部</div>
        
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            
            window.onscroll = function(){

                if( $(window).scrollTop() > 50 ){
                    $(".goTop").removeClass('hide')
                }else{
                    $(".goTop").addClass('hide')
                }
            }
            
            $('.goTop').click(function(){
                
                $(window).scrollTop(0)
            })
            
        </script>
    </body>
</html>
demo

缓慢返回顶部(带效果):

$('#backTop').bind('click',function(){
    $('html,body').animate( {scrollTop:0} );
});

注:html,body需一起使用。

实例 滚动菜单 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        
        <style type="text/css">
            body{
                margin: 0;
                padding: 0;
            }
            .head{
                height: 50px;
                background-color: burlywood;
            }
            .menu{
                position: absolute;
                left: 0;
                background-color: ghostwhite;
                width:200px;
                height: 600px;
                float:left;
            }
            .menu-fix{
                position: fixed;
                top:10px;
            }
            .father{
                background-color: gray;
                position: absolute;
                left: 210px;
            }
            .item{
                width: 800px;
                height: 600px;
            }
            .title{
                text-align: center;
            }
            .active{
                background-color: cornflowerblue;
                color: darkgreen;
            }
        </style>
    </head>
    <body>
        <div class="head"></div>
        
        <div class="menu">
            <div class="title active" target='c1'>第一张</div>
            <div class="title" target='c2'>第二张</div>
            <div class="title" target='c3'>第三张</div>
        </div>
        
        <div class="father">
            <div class="content">
                <div class="item" con='c1'>第一章</div>
                <div class="item" con='c2'>第二章</div>
                <div class="item" con='c3'>第三章</div>
            </div>
        </div>
        
        <script src="jquery-1.8.2.js"></script>
        <script>
            window.onscroll = function(){

                var current = $(window).scrollTop()
                if(current > 50 ){
                    $('.menu').addClass('menu-fix')
                }
                else{
                    $('.menu').removeClass('menu-fix')
                }
                
                if( current + $(window).height() == $(document).height() ){
                    $('.menu').children(":last").addClass('active').siblings().removeClass('active');
                    return
                }
                
                $('.item').each(function(){

                    var item_top = $(this).offset().top;
                    var item_height = $(this).height();
                    var title = $(this).attr('con')
                    if ( current > item_top && current < item_height+item_top){
                        $(".title[target="+title+"]").addClass('active').siblings().removeClass('active')
                    }
                    
                })
                
            }
        </script>
        
    </body>
</html>
demo

3.3 文档处理

3.3.1 内部插入

$("p").append("<b>nick</b>");    //每个p元素内后面追加内容
$("p").appendTo("div");        //p元素追加到div内后
$("p").prepend("<b>Hello</b>");  //每个p元素内前面追加内容
$("p").prependTo("div");        //p元素追加到div内前

3.3.2 外部插入

$("p").after("<b>nick</b>");     //每个p元素同级之后插入内容
$("p").before("<b>nick</b>");    //在每个p元素同级之前插入内容
$("p").insertAfter("#test");     //所有p元素插入到id为test元素的后面
$("p").insertBefore("#test");    //所有p元素插入到id为test元素的前面

3.3.3 替换

$("p").replaceWith("<b>Paragraph. </b>");    //将所有匹配的元素替换成指定的HTML或DOM元素
$("<b>Paragraph. </b>").replaceAll("p");     //用匹配的元素替换掉所有 selector匹配到的元素

3.3.4 删除

$("p").empty();     //删除匹配的元素集合中所有的子节点,不包括本身
$("p").remove();    //删除所有匹配的元素,包括本身
$("p").detach();    //删除所有匹配的元素(和remove()不同的是:所有绑定的事件、附加的数据会保留下来)

3.3.5 复制

$("p").clone()      //克隆元素并选中克隆的副本
$("p").clone(true)   //布尔值指事件处理函数是否会被复制

实例 克隆方法的应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
            <div class="outer">
                <div class="condition">

                        <div class="icons" style="display:inline-block">
                            <a onclick="add(this);"><button>+</button></a>
                        </div>

                        <div class="input" style="display:inline-block">
                            <input type="checkbox">
                            <input type="text" value="alex">
                        </div>
                </div>
            </div>

<script src="jquery-1.8.2.js"></script>
    <script>

            function add(self){
                var $duplicate = $(self).parent().parent().clone();
                $duplicate.find('a[onclick="add(this);"]').attr('onclick',"removed(this)").children("").text("-");
                $duplicate.appendTo($(self).parent().parent().parent());

            }
           function removed(self){

               $(self).parent().parent().remove()

           }

    </script>
</body>
</html>
demo

四   事件 

4.1 页面载入

  当页面载入成功后再运行的函数事件  使用后可以在开头位置写入jq代码

$(document).ready(function(){
  do something...
});

//简写
$(function($) {
  do something...
});

4.2 事件处理

//bind 为每个匹配元素绑定事件处理函数,绑定多个用{}。     3.0+版本已弃用
$("p").bind("click", function(){
  alert( $(this).text() );
});
$(menuF).bind({
    "mouseover":function () {
     $(menuS).parent().removeClass("hide");
     },"mouseout":function () {
     $(menuS).parent().addClass("hide");
}
});         

$("p").click(function(){})  =  $("p").bind("click",function(){})     

$("p").one( "click", fun...)    //one 绑定一个一次性的事件处理函数
$("p").unbind( "click" )        //解绑一个事件

4.3 事件委派    3.0+版本已弃用

// 与bind 不同的是当事件发生时才去临时绑定。
$("p").delegate("click",function(){
  do something...
});

$("p").undelegate();       //p元素删除由 delegate() 方法添加的所有事件
$("p").undelegate("click")   //从p元素删除由 delegate() 方法添加的所有click事件

4.4 事件

$("p").click();      //单击事件
$("p").dblclick();    //双击事件
$("input[type=text]").focus()  //元素获得焦点时,触发 focus 事件
$("input[type=text]").blur()   //元素失去焦点时,触发 blur事件
$("button").mousedown()//当按下鼠标时触发事件
$("button").mouseup()  //元素上放松鼠标按钮时触发事件
$("p").mousemove()     //当鼠标指针在指定的元素中移动时触发事件
$("p").mouseover()     //当鼠标指针位于元素上方时触发事件
$("p").mouseout()     //当鼠标指针从元素上移开时触发事件
$(window).keydown()    //当键盘或按钮被按下时触发事件
$(window).keypress()   //当键盘或按钮被按下时触发事件,每输入一个字符都触发一次
$("input").keyup()     //当按钮被松开时触发事件
$(window).scroll()     //当用户滚动时触发事件
$(window).resize()     //当调整浏览器窗口的大小时触发事件
$("input[type='text']").change()    //当元素的值发生改变时触发事件
$("input").select()    //当input 元素中的文本被选择时触发事件
$("form").submit()     //当提交表单时触发事件
$(window).unload()     //用户离开页面时

4.5 event object 对象

所有的事件函数都可以传入event参数方便处理事件

$("p").click(function(event){  
 alert(event.type); //"click"  
}); 

(evnet object)属性方法:
event.pageX   //事件发生时,鼠标距离网页左上角的水平距离
event.pageY   //事件发生时,鼠标距离网页左上角的垂直距离
event.type   //事件的类型
event.which   //按下了哪一个键
event.data   //在事件对象上绑定数据,然后传入事件处理函数
event.target  //事件针对的网页元素
event.preventDefault()  //阻止事件的默认行为(比如点击链接,会自动打开新页面)
event.stopPropagation()  //停止事件向上层元素冒泡

实例 拖动面板

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .bar{
                width: 250px;
                height: 250px;
                border: 1px solid gray;
                position: absolute;
                left: 10px;
                right: 10px;
            }
            .bar .title{
                height: 30px;
                background-color: burlywood;
            }
        </style>
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $(function(){
                $('#title').mouseover(function(){
                    $(this).css('cursor','move');
                }).mousedown(function(e){
                    var _event  = e || window.event;
                    var old_x = _event.clientX;
                    var old_y = _event.clientY;
                    
                    var box_x = $(this).parent().offset().left;
                    var box_y = $(this).parent().offset().top;
                    
                    $(this).bind('mousemove',function(e){
                        var _event  = e || window.event;
                        var new_x = _event.clientX;
                        var new_y = _event.clientY;
                        
                        var new_box_x = box_x + (new_x - old_x);
                        var new_box_y = box_y + (new_y - old_y);
                        $(this).parent().css('left',new_box_x+'px');
                        $(this).parent().css('top',new_box_y+'px');
                        
                    })
                }).mouseup(function(){
                    $(this).unbind('mousemove');
                })
            })
            
        </script>
    </head>
    <body>
        <div class="bar">
            <div class="title" id='title'>标题</div>
            <div class="content">content</div>
        </div>
    </body>
</html>
demo

解决: 拖动面板鼠标移动过快,移动断开问题

绑定在div上 鼠标移出div层 事件就消失了,绑定在 document 上也就是整个页面都有这个事件!

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .bar{
                width: 250px;
                height: 250px;
                border: 1px solid gray;
                position: absolute;
                left: 10px;
                right: 10px;
            }
            .bar .title{
                height: 50px;
                text-align: center;
                border: 1px solid red;
                background-color: burlywood;
                cursor: move;
            }
        </style>
        
    </head>
    <body>

        <div class="bar hide">
            <div class="title" id='title'>标题</div>
            <div class="content">content</div>
        </div>
        
        
        <script src="jquery-2.1.4.min.js"></script>
        <script type="text/javascript">
            $(function(){
                
                var MFloat = false;
                var old_x,old_y;
                var box_x,box_y;
                
                $('.title').on('mousedown',function(e){
                    
                    var _event  = e || window.event;
                    
                    old_x = _event.clientX;
                    old_y = _event.clientY;
                    
                    box_x = $('.title').parent().offset().left;
                    box_y = $('.title').parent().offset().top;
                    MFloat = true;
                })
                
                $(document).mouseover(function(e){
                    if(MFloat){
                        var _event  = e || window.event;
                        var new_x = _event.clientX;
                        var new_y = _event.clientY;
                        
                        var new_box_x = box_x + (new_x - old_x);
                        var new_box_y = box_y + (new_y - old_y);
                        $('.title').parent().css('left',new_box_x+'px');
                        $('.title').parent().css('top',new_box_y+'px');
                    }
                }).mouseup(function(){
                    MFloat = false;
                })
            })
            
        </script>
    </body>
</html>
demo

event.clientX、event.clientY

鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条。IE事件和标准事件都定义了这2个属性

event.pageX、event.pageY

类似于event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。这2个属性不是标准属性,但得到了广泛支持。IE事件中没有这2个属性。

event.offsetX、event.offsetY

鼠标相对于事件源元素(srcElement)的X,Y坐标,只有IE事件有这2个属性,标准事件没有对应的属性。

event.screenX、event.screenY

鼠标相对于用户显示器屏幕左上角的X,Y坐标。标准事件和IE事件都定义了这2个属性

input 输入框的change事件,要在input失去焦点的时候才会触发!

$('input[name=myInput]').change(function() { ... });

在输入框内容变化的时候不会触发change,当鼠标在其他地方点一下才会触发

用下面的方法会生效,input

$("#input_id").on('input',function(e){  
   alert('Changed!')  
});  

五 动画效果

5.1 基本  在动画完成后,可选地触发一个回调函数!

$("p").show()        //显示隐藏的匹配元素
$("p").show("slow");    //参数表示速度,("slow","normal","fast"),也可为900毫秒
$("p").hide()        //隐藏显示的元素
$("p").toggle();      //切换 显示/隐藏
$("p").stop()              //停止所有在指定元素上正在运行的动画。

实例 显示与隐藏

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style></style>
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $(function(){
                $('#hide').click(function(){
                    $('p').hide(1000);
                })
                $('#show').click(function(){
                    $('p').show(1000);
                })
                $('#toggle').click(function(){
                    $('p').toggle(1000);
                })
            })
        </script>
    </head>
    <body>
        <p style="background-color: pink;">hello</p>
        <button id="hide">隐藏</button>
        <button id="show">显示</button>
        <button id="toggle">隐藏/显示</button>
    </body>
</html>
demo

实例 回调函数

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style></style>
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $(function(){
                $('#hide').click(function(){
                    $('p').hide(1000,function(){
                        alert(1);
                    });
                })
                $('#show').click(function(){
                    $('p').show(1000);
                })
                $('#toggle').click(function(){
                    $('p').toggle(1000);
                })
            })
        </script>
    </head>
    <body>
        <p style="background-color: pink;">hello</p>
        <button id="hide">隐藏</button>
        <button id="show">显示</button>
        <button id="toggle">隐藏/显示</button>
    </body>
</html>
demo

5.2 淡入淡出  在动画完成后,可选地触发一个回调函数!

$("p").fadeIn("900");        //用900毫秒时间将段落淡入
$("p").fadeOut("900");       //用900毫秒时间将段落淡出
$("p").fadeToggle("900");     //用900毫秒时间将段落淡入,淡出
$("p").fadeTo("slow", 0.6);    //用900毫秒时间将段落的透明度调整到0.6

实例 淡入淡出

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $(function(){
                $('#in').click(function(){
                    $('#id1').fadeIn(1000);
                    $('#id2').fadeIn(1000);
                    $('#id3').fadeIn(1000);
                });
                $('#out').click(function(){
                    $('#id1').fadeOut(1000);
                    $('#id2').fadeOut(1000);
                    $('#id3').fadeOut(1000);
                });
                $('#toggle').click(function(){
                    $('#id1').fadeToggle(1000);
                    $('#id2').fadeToggle(1000);
                    $('#id3').fadeToggle(1000);
                });
                $('#fadeto').click(function(){
                    $('#id1').fadeTo("slow", 0.6);
                    $('#id2').fadeTo("fast", 0.4);
                    $('#id3').fadeTo("slow", 0.2);
                });
                
            })
        </script>
    </head>
    <body>
          <button id="in">fadein</button>
        <button id="out">fadeout</button>
        <button id="toggle">fadetoggle</button>
        <button id="fadeto">fadeto</button>
        
        <div id="id1" style="display:none; width: 80px;height: 80px;background-color: blueviolet"></div>
        <div id="id2" style="display:none; width: 80px;height: 80px;background-color: orangered "></div>
        <div id="id3" style="display:none; width: 80px;height: 80px;background-color: darkgreen "></div>
        
    </body>
</html>
demo

5.3 滑动  在动画完成后,可选地触发一个回调函数!

$("p").slideDown("900");    //用900毫秒时间将段落滑下
$("p").slideUp("900");     //用900毫秒时间将段落滑上
$("p").slideToggle("900");  //用900毫秒时间将段落滑上,滑下

实例 滑动

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
        #flipshow,#content,#fliphide,#toggle{
            padding: 5px;
            text-align: center;
            background-color: #ddd;
            border:solid 1px red;
        }
        #content{
            padding: 50px;
            display: none;
        }
        </style>
        <script src="jquery-1.8.2.js"></script>
        <script>
            $(function(){
                 $("#flipshow").click(function(){
                     $("#content").slideDown(1000);
                 });
                  $("#fliphide").click(function(){
                     $("#content").slideUp(1000);
                 });
                  $("#toggle").click(function(){
                     $("#content").slideToggle(1000);
                 })
            })
            
        </script>
    </head>
    <body>
        <div id="flipshow">出现</div>
        <div id="fliphide">隐藏</div>
        <div id="toggle">toggle</div>
    
        <div id="content">helloworld</div>
    </body>
</html>
demo

实例 京东轮播图

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            body{
                margin: 0;
            }
            ul{
                padding: 0;
                margin: 0;
            }
            ul li{
                list-style: none;
                padding: 0;
            }
            .outer{
                width:790px ;
                height: 340px;
                margin: 0 auto;
                border: darkturquoise dashed 6px;
                position: relative;
                cursor: pointer;
            }
            .outer:hover .btn{
                display: block;
            }
            .outer .img ul li img{
                position: absolute;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
            }
            .outer .b-slider{
                position: absolute;
                bottom: 20px;
                left: 50%;
                margin-left: -10%;
                cursor:default;
            }
            .outer .b-slider .num{
                text-align: center;
                border-radius: 25px;
                font-size: 0;
                background-color: hsla(0,0%,100%,.3);
                height: 20px;
            }            
            .outer .b-slider .num li{
                display: inline-block;
                width: 12px;
                height: 12px;
                border-radius: 100%;
                background-color: white;
                text-align: center;
                margin: 4px 5px;
            }
            .outer .b-slider .num li.active{
                background-color: #db192a;
            }
            .btn{
                position: absolute;
                top: 50%;
                margin-top: -30px;
                width: 30px;
                height: 60px;
                background: rgba(0,0,0,.1);
                text-align: center;
                line-height: 60px;
                color: white;
                font-weight: bolder;
                display: none;
                cursor: pointer;
            }
            .btn:hover{
                background: rgba(0,0,0,.6);
            }
            .outer .right{
                right: 0;
            }
            
        </style>
        <script src="jquery-2.2.3.min.js"></script>
        <script type="text/javascript">
            $(function(){
                
                //生成底部标签:
                var size = $('.img img').size();
                for (var i= 1;i<=size;i++){
                    $('.b-slider .num').append('<li></li>');
                }
                
                $('.num li').first().addClass('active');
                $('.img li').first().show().siblings().hide();
                
                $('.num li').mouseover(function(){
                    $(this).addClass('active').siblings().removeClass('active');
                    var index = $(this).index();
                    i = index;
                    $('.img li').eq(index).stop().fadeIn(500).siblings().stop().fadeOut(500);
                })
                
                var time = setInterval(move,3000);
                i = 0;
                function move(){
                    i++;
                    if(i==size){i=0;}
                    $('.num li').eq(i).addClass('active').siblings().removeClass('active');
                    $('.img li').eq(i).stop().fadeIn(500).siblings().stop().fadeOut(500);
                }
                
                $('.outer').hover(function(){
                    clearInterval(time);
                },function(){
                    time = setInterval(move,3000);
                });
                
                $('.right').click(function(){
                    move();
                })
                $('.left').click(function(){
                    if(i==0){i=size}
                    i=i-2;
                    move();
                })
                
            })

        </script>
    </head>
    <body>
        <div class="outer">
            
            <div class="img">
                <ul>
                    <li><a href="#"><img src="1.jpg" /></a></li>
                    <li><a href="#"><img src="2.jpg" /></a></li>
                    <li><a href="#"><img src="3.jpg" /></a></li>
                    <li><a href="#"><img src="4.jpg" /></a></li>
                    <li><a href="#"><img src="5.jpg" /></a></li>
                    <li><a href="#"><img src="6.jpg" /></a></li>
                    <li><a href="#"><img src="7.jpg" /></a></li>
                    <li><a href="#"><img src="8.jpg" /></a></li>
                </ul>
            </div>
            
            <div class="b-slider">
                <ul class="num"></ul>
            </div>
            
            <div class="btn left"> < </div>
            <div class="btn right"> > </div>
            
        </div>
    </body>
</html>
demo

实例 放大镜

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .outer{
                position: relative;
            }
            .imgshow{
                width: 430px;
                height: 430px;
                border: 5px cornflowerblue dashed;
                position: relative;
                overflow: hidden;
            }
            .imgzoom{
                position: absolute;
                left: 0;
                top: 0;
                width: 170px;
                height: 170px;
                background-color: gray;
                opacity: 0.6;
                display: none;
            }
            .bigshow{
                border: 5px darkgreen solid;
                position: absolute;
                left: 440px;
                top: 0;
                width: 500px;
                height: 500px;
                overflow: hidden;
                display: none;
            }
            .bigshow img{
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div class="outer">
            <div class="imgshow">
                <div class="imgzoom"></div>
                <img src="small.jpg" alt="" />
            </div>
            <div class="bigshow">
                <img src="big.jpg" alt="" />
            </div>
        </div>
        
        
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $(function(){
                
                $('.imgshow').bind('mouseover',function(){
                    $('.imgzoom').css('display','block');
                    $('.bigshow').css('display','block');
                });
                $('.imgshow').bind('mouseout',function(){
                    $('.imgzoom').css('display','none');
                    $('.bigshow').css('display','none');
                });
                
                $('.imgshow').bind('mousemove',function(e){
                    
                    var _event = e || window.event;
                    
                    var small_box_height = $('.imgshow').height();
                    var small_box_width = $('.imgshow').width();
                    
                    var zoom_height = $('.imgzoom').height();
                    var zoom_width = $('.imgzoom').width();
                    
                    var zoom_height_half = $('.imgzoom').height()/2 ;
                    var zoom_width_half = $('.imgzoom').width()/2 ;
                    
                    var mouse_left = _event.clientX;
                    var mouse_top = _event.clientY;
                    
                    var zoom_move_left = mouse_left - zoom_width_half;
                    var zoom_move_top = mouse_top - zoom_height_half;
                    
                    if(zoom_move_left < 0 ){
                        zoom_move_left = 0 ;
                    }else if(zoom_move_left > small_box_width - zoom_width){
                        zoom_move_left = small_box_width - zoom_width;
                    }
                    
                    if(mouse_top < zoom_height_half ){
                        zoom_move_top = 0 ;
                    }else if(zoom_move_top > small_box_height - zoom_height){
                        zoom_move_top = small_box_height - zoom_height ;
                    }
                    
                    $('.imgzoom').css('left',zoom_move_left+'px');
                    $('.imgzoom').css('top',zoom_move_top+'px');
                    
                    var percentX = ( $('.bigshow img').width() - $('.bigshow').width() )/ (small_box_width - zoom_width)
                    var percentY = ( $('.bigshow img').height() - $('.bigshow').height() )/ (small_box_height - zoom_height)
                    
                    $('.bigshow img').css('left' , -percentX*zoom_move_left+'px');
                    $('.bigshow img').css('top' , -percentY*zoom_move_top+'px');
                })
                
            })
        </script>
    </body> 
</html>
demo

实例 编辑框

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .outer{
                height: 50px;
            }
            .editMod{
                padding: 10px;
                background-color: gray;
                text-decoration: none;
                color: white;
            }
            .editing{
                background-color: wheat;
                color: red;
            }
        </style>
    </head>
    <body>
        <div class="outer">
            <button id="selectAll" onclick="selectAll('#editMod','#tb1');">全选</button>
            <button id="reserve" onclick="reserve('#editMod','#tb1');">反选</button>
            <button id="cancelAll" onclick="cancelAll('#editMod','#tb1');">取消</button>
            <a href="javascript:void(0)" class="editMod" id="editMod" onclick="editing(this,'#tb1');">进入编辑模式</a>
        </div>    
        
            <table border="1">
                <thead>
                    <tr>
                        <th>选择</th>
                        <th>主机名</th>
                        <th>端口</th>
                        <th>状态</th>
                    </tr>
                </thead>
                <tbody id="tb1">
                    <tr>
                        <td><input type="checkbox" /></td>
                        <td edit='true'>v1</td>
                        <td>v11</td>
                        <td edit='true' edit-type='select' select-value='1' global-key='STATUS'  select-text='在线'>在线</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox" /></td>
                        <td  edit='true'>v2</td>
                        <td>v22</td>
                        <td edit='true' edit-type='select' select-value='2' global-key='STATUS' select-text='下线'>下线</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox" /></td>
                        <td  edit='true'>v3</td>
                        <td>v33</td>
                        <td edit='true' edit-type='select' select-value='1' global-key='STATUS' select-text='在线'>在线</td>
                    </tr>
                </tbody>
            </table>
            
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            STATUS = [
                {'id':'1' , 'value':'在线'},
                {'id':'2' , 'value':'下线'},
            ]
            $(function(){
                bindCheckbox('#editMod','#tb1');
                
            })
            
            window.globalCtrlKeyPress = false;
            window.onkeydown=function(event){
                if(event && event.keyCode == 17){
                    window.globalCtrlKeyPress = true;
                }
            }
            window.onkeyup=function(event){
                if(event && event.keyCode == 17){
                    window.globalCtrlKeyPress = false;
                }
            }
            
            function MulKeySelect(self){
                if(window.globalCtrlKeyPress){
                    var index = $(self).parent().index();
                    var value = $(self).val();
                    $(self).parent().parent().nextAll().find("td input[type='checkbox']:checked").each(function(){
                        $(this).parent().parent().children().eq(index).children().val(value);
                    })
                }
            }
            
            function bindCheckbox(mode,tb){
                $(tb).find(':checkbox').bind('click',function(){
                    var $tr = $(this).parent().parent();
                    if( $(mode).hasClass('editing') ){
                        if( $(this).prop('checked')){
                            RowIntoEdit($tr);
                        }else{
                            RowOutEdit($tr);
                        }
                    }
                })
            }
            
            function selectAll(mode,tb){
                if( $(mode).hasClass('editing') ){
                    
                    $(tb).children().each(function(){
                        var tr = $(this);
                        var check = tr.children().find(':checkbox');
                        if(check.prop('checked')){
                            
                        }else{
                            check.prop('checked',true);
                            RowIntoEdit(tr);
                        }
                    })
                }else{
                    $(tb).find(':checkbox').prop('checked',true);
                }
            }
            function reserve(mode,tb){
                if( $('#editMod').hasClass('editing') ){
                    
                    $(tb).children().each(function(){
                        var tr = $(this);
                        var check = tr.children().first().find(':checkbox');
                        if(check.prop('checked')){
                            check.prop('checked',false);
                            RowOutEdit(tr);
                        }else{
                            check.prop('checked',true);
                            RowIntoEdit(tr);
                        }
                    })
                    
                }else{
                    $(tb).children().each(function(){
                        if($(this).find(':checkbox').prop('checked')){
                            $(this).find(':checkbox').prop('checked',false);
                        }else{
                            $(this).find(':checkbox').prop('checked',true);
                        }
                    })
                    
                }
            }
            function cancelAll(mode,tb){
                if( $(mode).hasClass('editing') ){
                    
                    $(tb).children().each(function(){
                        var tr = $(this);
                        var check = tr.children().find(':checked');
                        if(check.prop('checked')){
                            check.prop('checked',false);
                            RowOutEdit(tr);
                        }else{
                            
                        }
                    })
                }else{
                    $(tb).find(':checkbox').prop('checked',false);
                }
            }
            function editing(self,tb){
                if( $(self).hasClass('editing') ){
                    $(self).removeClass('editing');
                    $(tb).children().each(function(){
                        var tr = $(this);
                        var check_box = tr.children().first().find(':checkbox');
                        if(check_box.prop('checked')){
                            RowOutEdit(tr);
                        }else{
                            
                        }
                    });
                }else{
                    $(self).addClass('editing');
                    $(tb).children().each(function(){
                        var tr = $(this);
                        var check_box = tr.children().first().find(':checkbox');
                        if(check_box.prop('checked')){
                            RowIntoEdit(tr);
                        }else{
                            
                        }
                    });
                }    
            }
            
            function RowIntoEdit(tr){
                tr.children().each(function(){
                    var td = $(this);
                    var edit_check = td.attr('edit');
                    if(edit_check == 'true' ){
                        var edit_type = td.attr('edit-type');
                        if(edit_type == 'select'){
                            
                            var select_value = td.attr('select-value');
                            var global_key = td.attr('global-key');
                            var select_attr = { 'onchange' : 'MulKeySelect(this);'};
                            var select_css = "";
                            var temp = createSelect(attr=select_attr,css=select_css,option_dict=global_key,current_value=select_value);
                            td.html(temp);
                            
                        }else{
                            var text = td.text();
                            var temp = "<input type='text' value='"+text+"'/>"
                            td.html(temp);
                        }
                    }
                })
            }
            function RowOutEdit(tr){
                tr.children().each(function(){
                    var td = $(this);
                    var edit_check = td.attr('edit');
                    if(edit_check == 'true' ){
                        var edit_type = td.attr('edit-type');
                        if(edit_type == 'select'){
                            
                            var select_val = td.children(':first').val();
                            var select_text = td.children(':first').find("option[select_value='"+select_val+"']").text();
                            td.attr('select-value',select_val);
                            td.attr('select-text',select_text);
                            td.text(select_text);
                            
                        }else{
                            var text = td.children().first().val();
                            td.text(text);
                        }
                    }
                    
                })
            }
            function createSelect(attr,css,option_dict,current_value){

                var sel = document.createElement('select');
                
                $.each(attr, function(k,v) {
                    $(sel).attr(k,v);
                });
                $.each(css, function(k,v) {
                    $(sel).css(k,v);
                });
                
                //生成下拉选项:
                $.each(window[option_dict], function(k,v) {
                    var select_num = v['id'];
                    var select_value = v['value'];
                    var opp = document.createElement('option');
                    
                    if(current_value == select_num){  //默认值相同应该选中
                        $(opp).attr('select_value',select_num).attr('select-text',select_value).text(select_value).val(select_num).attr('selected',true).appendTo($(sel));
                    }else{
                        $(opp).attr('select_value',select_num).attr('select-text',select_value).text(select_value).val(select_num).appendTo($(sel));
                    }

                });
                
                return sel;
            }
            
        </script>
        
    </body>
</html>
demo

六 对象访问

$.trim()   //去除字符串两端的空格
$.each()   //遍历一个数组或对象,for循环
$.inArray() //返回一个值在数组中的索引位置,不存在返回-1  
$.grep()   //返回数组中符合某种标准的元素
$.extend()  //将多个对象,合并到第一个对象
$.makeArray() //将对象转化为数组
$.type()    //判断对象的类别(函数对象、日期对象、数组对象、正则对象等等
$.isArray() //判断某个参数是否为数组
$.isEmptyObject() //判断某个对象是否为空(不含有任何属性)
$.isFunction()    //判断某个参数是否为函数
$.isPlainObject() //判断某个参数是否为用"{}"或"new Object"建立的对象
$.support()       //判断浏览器是否支持某个特性

循环:json对象:

$.each( data, function(k,v){ .... } )

return false  =>  break
return true  =>  continue

判断空object对象:

function isEmptyObject(e) {
    var t;
    for(t in e)
        return !1;
    return !0;
}

七 插件扩展机制

//方式一    jQuery 可以简写成 $
jQuery.fn.extend({
    hello:function(){
        return $(this).text();
    }
});

var index = $('.title').hello()
alert(index);


<div class="title">1111</div>
<div class="title">2222</div>
//方式二
$.extend({
    hello1 :function(arg){
        var index = $(arg).text();
        return index;
    }
})

var index = $.hello1('.title')
alert(index)


<div class="title">1111</div>
<div class="title">2222</div>

实例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="jquery-1.8.2.js"></script>
        <script type="text/javascript">
            $(function(){
                //方式一:
                $.fn.extend({
                    hello:function(){
                        return $(this).text();
                    }
                });
                
                //方式二:
                $.extend({
                    hello1 :function(arg){
                        var index = $(arg).text();
                        return index;
                    }
                })
                
                //方式一:
//                var index = $('.title').hello()
//                alert(index);
                
                //方式二:
                var index = $.hello1('.title')
                alert(index)
            })
        </script>
    </head>
    <body>
        <div class="title">1111</div>
        <div class="title">2222</div>
    </body>
</html>
demo

八 补充

1.input 事件, 输入时触发:

$('#inp').on('input',function(){});

2.文件上传input  变更时触发:

$(".upload").on("change","input[type='file']",function(){
    ...
});

3.ajax异步请求页面时,必须返回数据,不能在后台指定跳转页面

4.判断是否存在该标签:

$('xxx').length > 0

5.DOM对象、JQ对象 转换

获取 Dom对象
document.getElementsTagName('div')[0]

获取 JQuery对象
$('div').first()

Dom对象  =>  JQuery对象
$(document.getElementsTagName('div')[0])

JQuery对象  =>  Dom对象
$('div').first()[0]

6.JSON 转换

JSON.parse(arg)       字符串=>原型
JSON.stringify(arg)   原型=>字符串

 

 

练习题

demo 1:左侧菜单

demo 2:tab切换

demo 3:编辑框正反选

demo 4:返回顶部

demo 5:滚动菜单

demo 6:克隆方法的应用

demo 7:模态对话框

demo 8:拖动面板

demo 9:显示与隐藏

demo 10:淡入淡出

demo 11:滑动

demo 12:京东轮播图

demo 13:放大镜

demo 14:编辑框

 

posted @ 2017-02-03 10:45  5_FireFly  阅读(500)  评论(0编辑  收藏  举报
web
counter