菜单下拉组件

164105_usm7_2405644.jpg示意图

源码js:

/**
 * 菜单
 nolest 2015.5.22
 **/

/**
 * @require ./index.scss
 */

"use strict";

var utility = require('../common/utility/index');
var $ = require('zepto');
var fastclick = require('fastclick');
var App =  require('../common/I_APP/I_APP');
var menu_tpl = __inline('./menu.tmpl');

if ('addEventListener' in document) {
    document.addEventListener('DOMContentLoaded', function() {
        fastclick.attach(document.body);
    }, false);
}


module.exports =
{
    render: function ($dom,data)
    {

        var self = this;

        self.data = self._sort(data);

        $dom.append(menu_tpl({menu_data:self.data}));

        self.init();
        // 安装事件
        self.setup_event();

        return this;
    },
    // 初始化
    init : function()
    {
        var self = this;

        self.menu_lock = $('[data-role="app_drop_menu_lock"]');

        self.menu = $('[data-role="app_drop_menu"]');

    },
    hide : function()
    {
        var self = this;

        setTimeout(function()
        {
            self.menu.removeClass('drop');
            self.menu.addClass('up');
        },0)
        self.menu_lock.css('visibility','hidden').addClass('fn-hide');
    },
    show : function()
    {
        var self = this;

        setTimeout(function()
        {
            self.menu.removeClass('up');
            self.menu.addClass('drop');
        },0)
        self.menu_lock.removeClass('fn-hide').css('visibility','visible');

    },
    // 安装事件
    setup_event : function()
    {
        var self = this;

        $.each($('[data-index]'),function(i,obj)
        {
            self.data[i].click_event && $(obj).on('click',self.data[i].click_event)
        });


        $('[data-role="app_drop_menu_lock"]').on('click',function()
        {
            self.hide();

        })
        /*
        $('[data-role="app_drop_menu_lock"]')[0].addEventListener('touchstart',function()
        {
            self.hide();

            window.__showTopBarMenuCount++;
        })
        */
    },
    _sort : function(events_data)
    {   //排序,返回序列化数组
        if(events_data.length < 2)
        {
            return
        }

        for(var k = 1;k <events_data.length;k++)
        {
            var obj_key = events_data[k];

            var j = k-1;

            while( j >= 0 && obj_key.index < events_data[j].index)
            {
                events_data[j+1] = events_data[j];
                j = j -1
            }
            events_data[j+1] = obj_key
        }
        return events_data
    }
};

源码CSS:

.app_drop_menu_lock{
  position: fixed;
  background: none;
  width: 100%;
  height: 100%;
  top: 0px;
  z-index: 9998;

}
.app_drop_menu{
  -webkit-box-orient:vertical;
  background: rgba(0,0,0,0.7);
  width: 130px;
  position: fixed;
  right: 0px;
  top:-250px;
  margin: 10px 5px 0px 0px;
  border-radius: 4px;
  padding: 0px 10px;
  font-size: 16px;
  z-index: 9999;
  -webkit-transform-style: preserve-3d;
  .delta{
    position: absolute;
    right: 15px;
    top: -6px;
    width: 0;
    height: 0;
    border-left: 7px solid transparent;
    border-right: 7px solid transparent;
    border-bottom: 6px solid rgba(0,0,0,.7);;
  }
  .child{
    display: -webkit-box;
    -webkit-box-orient:vertical;
    -webkit-box-pack:center;
    height: 50px;
    color: #fff;
    border-bottom: 1px solid #5c5b5d;
    p{
      max-height: 50px;
      overflow: hidden;
    }
    &:active p{
      color: #999;
    }
    &:last-child{
      border-bottom: none;
    }
    &.un{
      color: #717172;
    }
  }
  &.drop{
    animation:dropping 0.2s forwards ease-in;
    -webkit-animation:dropping 0.2s forwards ease-in;
  }
  &.up{
    animation:upping 0.2s;
    -webkit-animation:upping 0.2s;
  }
}

@-webkit-keyframes dropping
{
  from {top: -250px;display: -webkit-box;}
  to {top: 0px;}
}

@-webkit-keyframes upping
{
  from {top: 0px;}
  to {top: -250px;display: none;}
}

源码tmpl:

<div class="app_drop_menu_lock fn-hide" data-role="app_drop_menu_lock">

</div>
<div class="app_drop_menu" data-role="app_drop_menu">
    <div class="delta"></div>
    {{#each menu_data}}
        <div class="child" data-index="{{index}}"><p>{{content}}</p></div>
    {{/each}}
</div>


转载于:https://my.oschina.net/u/2405644/blog/492372

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值