简易的点击展开/关闭效果(原生JS版和JQ版)

可扩展的简易点击展开/关闭效果,分别用原生JavaScript和jQuery实现.使用方法及相关解释,请参见源码.
另,授人以鱼,不如授人以渔.我写的只是一个原型,提供一个思路一种方法.注释中我也注明了,如果你想要酷炫的效果,你可以根据自己的实际需求扩展.
查看演示: 点此查看DEMO
原生JS版本:

window.onload = function(){
    var divs = document.getElementsByTagName('div');//找到所有div元素
    for (var i = 0; i < divs.length; i++) {
        if (divs[i].className != 'jsdemo')
            continue;//如果元素class值不是jsdemo,继续查找
        //divs[i].style.display='none';   //如果你想默认是隐藏状态,可取消此行注释
        var title = divs[i].previousSibling;//通过上一个元素定位到标题元素
        if (title.nodeType != 1) { //为了确保找到的是元素节点
            title = title.previousSibling;
        }
        title.next = divs[i]; //设置标题的next属性并指向div[i]
        title.onclick = function(){//点击事件
            var curStyle = this.next.style.display;//取div[i]的默认display值,现在知道title.next的用意了吧
            var newStyle;//定义新的display值
            var ico = title.getElementsByTagName('span')[0];//包含展开关闭按钮的节点
            if (curStyle == 'none') {//取反实现点击的展开关闭
                newStyle = 'block';//当默认值是隐藏时,切换成可见
                ico.innerHTML = '-';//切换展开关闭按钮
            }
            else {
                newStyle = 'none';//当默认值是可见时,切换成隐藏
                ico.innerHTML = '+';//切换展开关闭按钮
            };
            title.next.style.display = newStyle;//为点击后的div[i]赋值
        }
    }
}

JQ版本:

$(function(){
    var $title = $('div.jqdemo');//找到要显示/隐藏的元素
    //$title.hide();   //如果你想默认是隐藏状态,可取消此行注释,下面两个切换函数换位
    $title.prev().toggle(function(){//为显示/隐藏元素的前一个元素(取出标题元素)设置点击切换事件
        $title.hide().prev().find('span').text('+');//第一次点击时,隐藏div元素,并找到标题元素中的span,切换按钮
    }, function(){
        $title.show().prev().find('span').text('-');//第二次点击时,显示div元素,并找到标题元素中的span,切换按钮
    });
    //JQ的代码是不是简洁漂亮的多.哈哈.几句代码就搞定了.通过修改show()/hide()还可以得到很炫酷的效果
});
共有 9 条评论.

发表评论8,347 Views

  1. 不错哦,非常实用,多谢LZ分享~~

    [回复]

  2. 谢谢分享,这个站太好了

    [回复]

  3. mrthink.net的文章总是这么有感觉,谢谢分享了。

    [回复]

  4. 很喜欢贵博客,不知可否交换一下链接,方便以后多来学习。
    我是一个web前端学习者,呵呵
    网站:web前端寒风 http://www.webbise.com
    贵博客已经加好!

    [回复]

    Mr.Think 回复:

    @web前端寒风, okay,已加上.

    [回复]

  5. 感觉有点硬邦邦的,smooth点就好啦。

    [回复]

    Mr.Think 回复:

    @guny, 为什么你不思考一下怎么实现比较柔滑的效果呢? 授人以鱼,不如授人以渔.我写的只是一个原型,提供一个思路一种方法.注释中我也注明了,如果你想要酷炫的效果,你可以根据自己的实际需求扩展.

    [回复]

  6. 升降机

    博客弄的不错啊 背景很漂亮啊,比上次来看到的漂亮多了啊 加油啊 回踩***(www.***.cn)

    [回复]

    Mr.Think 回复:

    @升降机, 感谢你对本站的支持,但本站不接受任何商业性质的链接或宣传,故将你评论中的相关信息用*替代.抱歉.
    另,本站自始至终均为当前风格,未曾大的改动.以技术分享为主,不倚重于界面.

    [回复]

发表评论[无需注册]