自定义DropDown下拉菜单
说明:
一个简单的js下拉框,因为目前都不怎么用到jquery了,也好久没写过jquery了,现在框架很多,基本上也用不到,只是以这个简单的例子玩一下。
先来看下效果图:
简单的下拉弹框下拉选项,支持滚动适应弹出方向。
<div class="mc-dropdown" id="dropdown"><button class="mc-btn-default">更多汽车</button><ul class="mc-dropdown-menu"><li><a id="drop_a" href="javascript:;">特斯拉</a></li><li><a href="javascript:;">宝马</a></li><li><a href="javascript:;">凯迪拉克</a></li><li><a href="javascript:;">保时捷</a></li></ul>
</div>
具体代码:
(function ($) {$.fn.DropDown =function (options){// 默认参数var defaults = {};// 合并参数options = $.extend(defaults, options);var drops = $('.mc-dropdown');var uls = $('body > .mc-dropdown-menu');var btns = drops.find('button');var id = $(this).attr('id');var oUl = $(this).find('ul');oUl.attr('id', id + '_menu');$(this).find('ul').remove();$('body').append(oUl);var oLi = oUl.find('li');var popperArrow = $("<div class='popper-arrow'></div>")oUl.append(popperArrow);var ul_height = oUl.outerHeight();$(this).find('button').on('click', btnClick);oLi.find('a').on('click', itemClick);$(document).click(function (){$(this).find('button').removeClass('mc-btn-active');oUl.hide();})var $this = $(this);$(window).resize(function (){layout.call($this.find('button'));})// 跟随document.addEventListener('scroll', function () {layout.call($this.find('button'));},true)function btnClick(){btns.removeClass('mc-btn-active');var $ul = $('#' + id + '_menu')if ($ul.is(':hidden')){$(this).addClass('mc-btn-active');$('.mc-dropdown-menu').hide()$ul.show();}else{$(this).removeClass('mc-btn-active');$('.mc-dropdown-menu').hide()$ul.hide();}layout.call(this);return false;}function itemClick(){btns.removeClass('mc-btn-active');oUl.hide();}function layout (){var $this_btn = $($this.context.activeElement)var btn_height = $this_btn.parent().height();var btn_width = $this_btn.parent().width();var selfBtnOffsetTop = $this_btn.parent().offset().top;var selfBtnOffsetLeft = $this_btn.parent().offset().left;var win_height = $(window).height();var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;// var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;var selfBtnTop = selfBtnOffsetTop - scrollTop;var selfBtnBottom = selfBtnTop + btn_height;// var selfBtnLeft = selfBtnOffsetLeft - scrollLeft;if(selfBtnBottom + ul_height < win_height){// 向下弹oUl.css({top: selfBtnOffsetTop + btn_height + 6 + 'px',bottom: 'auto',left: selfBtnOffsetLeft + 'px',minWidth: btn_width - 4 + 'px'})oUl.find('.popper-arrow').removeClass('bt')}else{if(ul_height > win_height * 0.5){// 贴地面var dd = scrollTop + win_height - ul_height;oUl.css({top: dd + 'px',bottom: 'auto',left: selfBtnOffsetLeft + 'px',minWidth: btn_width - 4 + 'px'});oUl.find('.popper-arrow').removeClass('bt')}else{// 向上弹oUl.css({top: selfBtnOffsetTop - ul_height - 6 + 'px',bottom: 'auto',minWidth: btn_width - 4 + 'px',left: selfBtnOffsetLeft + 'px'});oUl.find('.popper-arrow').addClass('bt')}}oUl.find('.popper-arrow').css('left', btn_width * 0.5 + 'px')}}})(jQuery);
自定义DropDown下拉菜单相关推荐
- 解决bootstrap dropdown 下拉菜单有时候不能显示的问题
解决bootstrap dropdown 下拉菜单有时候不能显示的问题 参考文章: (1)解决bootstrap dropdown 下拉菜单有时候不能显示的问题 (2)https://www.cnbl ...
- html下拉菜单制作方法,CSS3制作Dropdown下拉菜单的方法
:target 是CSS3 中新增的一个伪类,用以匹配当前页面的URI中某个标志符的目标元素(比如说当前页面URL下添加#comment就会定位到id="comment"的位置,俗 ...
- 了解elementUI的Form 表单和Dropdown 下拉菜单
Form 表单 由输入框.选择器.单选框.多选框等控件组成,用以收集.校验.提交数据 el-form el-form-item el-select el-option <el-form :inl ...
- vue、Dropdown 下拉菜单、Dropdown属性事件、vue Dropdown 全部下拉菜单、vue Dropdown 全部属性事件
vue.Dropdown 下拉菜单.Dropdown属性事件.vue Dropdown 全部下拉菜单.vue Dropdown 全部属性事件 设计规则 何时使用 代码演示 1.基本 2.右键菜单 3. ...
- 在Angular 8中使用自定义MultiSelect下拉菜单创建动态行
目录 介绍 如何工作? 先决条件 使用代码 第1步 第2步 第3步 第4步 第5步 第6步 第7步 第8步 第9步 第10步 第11步 结论 介绍 在本文中,我们将学习如何使用Angular 8创建动 ...
- 关于element-plus的Dropdown 下拉菜单属性的修改
** 关于element-plus的dropdown的下拉菜单的样式修改 ** 因为所做的界面和element-plus所提供的颜色不相搭配,所以进行了颜色的修改 1.首先是下拉框本身 可以看见原本的 ...
- vue实现Dropdown下拉菜单
1.需求 点击按钮出现下拉菜单 2.思路 为按钮绑定点击事件showPicker() 在按钮下另起一个div标签,用v-show绑定一个属性值isShowDropdown 在methods里定义sho ...
- android spinner自定义样式,android自定义Spinner下拉菜单(下拉列表框)样式
在Android中Spinner就是下拉菜单,它相当于HTML中的标签. Android中提供的Spinner Widget下拉菜单已经非常好用了,样式也适用, 不过我们还是可以通过定义xml的方式来 ...
- android自定义下拉筛选,android自定义Spinner下拉菜单(下拉列表框)样式
在Android中Spinner就是下拉菜单,它相当于HTML中的标签. Android中提供的Spinner Widget下拉菜单已经非常好用了,样式也适用, 不过我们还是可以通过定义xml的方式来 ...
最新文章
- SLAM综述(4)激光与视觉融合SLAM
- oracle两列同时去重_Oracle表中重复数据去重的方法实例详解
- vs安卓开发发布_向华为的鸿蒙看齐,谷歌发布全新系统,手机电脑通用
- QT的QFileOpenEvent类的使用
- Random Forest算法简介
- python 3解释器_python004 Python3 解释器
- Hibernate---简介
- xamarin UWP ActivityIndicator
- 【图像分割】基于matlab GAC水平集方法图像分割【含Matlab源码 389期】
- Linux多线程编程详细解析----条件变量 pthread_cond_t
- Android 常用简单bat脚本
- ubuntu双显示器下发生的问题
- wma转mp3怎么弄_wma格式怎么转换mp3
- 2013年09月27日
- 珞珈一号全国一张图相关信息及对于影像校正的一些思考
- 外企做开发,爽吗?(HSBC篇)
- host速度 mtk usb_[MTK] 如何修改usb驱动能力
- maven-surefire-plugin
- 密码加盐(盐值salt)
- 选赵敏还是选小昭,这可真是个问题 | Decision Tree
热门文章
- 【TCAX模板】Little Busters! OP(单段版+两段版:中日双语特效)
- 为什么00后不把工作当饭碗,却在背后偷偷努力?
- python flask 实现电脑屏幕实时共享
- 2023五一出游数据报告.pdf(附下载链接)
- 最新百度网盘群组分享平台源码
- 计算机默认快捷键怎么修改,怎样修改电脑快捷键设置知道的能告诉下吗
- CPU的功能和组成(计算机组成原理)
- Python中__slots__的使用
- Redis缓存预热、缓存穿透、缓存击穿、缓存雪崩,Redis布隆过滤器怎么实现?
- win10安装framework 3.5 错误代码0x800f0954 和 0x80070422 解决方法