说明:

一个简单的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下拉菜单相关推荐

  1. 解决bootstrap dropdown 下拉菜单有时候不能显示的问题

    解决bootstrap dropdown 下拉菜单有时候不能显示的问题 参考文章: (1)解决bootstrap dropdown 下拉菜单有时候不能显示的问题 (2)https://www.cnbl ...

  2. html下拉菜单制作方法,CSS3制作Dropdown下拉菜单的方法

    :target 是CSS3 中新增的一个伪类,用以匹配当前页面的URI中某个标志符的目标元素(比如说当前页面URL下添加#comment就会定位到id="comment"的位置,俗 ...

  3. 了解elementUI的Form 表单和Dropdown 下拉菜单

    Form 表单 由输入框.选择器.单选框.多选框等控件组成,用以收集.校验.提交数据 el-form el-form-item el-select el-option <el-form :inl ...

  4. vue、Dropdown 下拉菜单、Dropdown属性事件、vue Dropdown 全部下拉菜单、vue Dropdown 全部属性事件

    vue.Dropdown 下拉菜单.Dropdown属性事件.vue Dropdown 全部下拉菜单.vue Dropdown 全部属性事件 设计规则 何时使用 代码演示 1.基本 2.右键菜单 3. ...

  5. 在Angular 8中使用自定义MultiSelect下拉菜单创建动态行

    目录 介绍 如何工作? 先决条件 使用代码 第1步 第2步 第3步 第4步 第5步 第6步 第7步 第8步 第9步 第10步 第11步 结论 介绍 在本文中,我们将学习如何使用Angular 8创建动 ...

  6. 关于element-plus的Dropdown 下拉菜单属性的修改

    ** 关于element-plus的dropdown的下拉菜单的样式修改 ** 因为所做的界面和element-plus所提供的颜色不相搭配,所以进行了颜色的修改 1.首先是下拉框本身 可以看见原本的 ...

  7. vue实现Dropdown下拉菜单

    1.需求 点击按钮出现下拉菜单 2.思路 为按钮绑定点击事件showPicker() 在按钮下另起一个div标签,用v-show绑定一个属性值isShowDropdown 在methods里定义sho ...

  8. android spinner自定义样式,android自定义Spinner下拉菜单(下拉列表框)样式

    在Android中Spinner就是下拉菜单,它相当于HTML中的标签. Android中提供的Spinner Widget下拉菜单已经非常好用了,样式也适用, 不过我们还是可以通过定义xml的方式来 ...

  9. android自定义下拉筛选,android自定义Spinner下拉菜单(下拉列表框)样式

    在Android中Spinner就是下拉菜单,它相当于HTML中的标签. Android中提供的Spinner Widget下拉菜单已经非常好用了,样式也适用, 不过我们还是可以通过定义xml的方式来 ...

最新文章

  1. SLAM综述(4)激光与视觉融合SLAM
  2. oracle两列同时去重_Oracle表中重复数据去重的方法实例详解
  3. vs安卓开发发布_向华为的鸿蒙看齐,谷歌发布全新系统,手机电脑通用
  4. QT的QFileOpenEvent类的使用
  5. Random Forest算法简介
  6. python 3解释器_python004 Python3 解释器
  7. Hibernate---简介
  8. xamarin UWP ActivityIndicator
  9. 【图像分割】基于matlab GAC水平集方法图像分割【含Matlab源码 389期】
  10. Linux多线程编程详细解析----条件变量 pthread_cond_t
  11. Android 常用简单bat脚本
  12. ubuntu双显示器下发生的问题
  13. wma转mp3怎么弄_wma格式怎么转换mp3
  14. 2013年09月27日
  15. 珞珈一号全国一张图相关信息及对于影像校正的一些思考
  16. 外企做开发,爽吗?(HSBC篇)
  17. host速度 mtk usb_[MTK] 如何修改usb驱动能力
  18. maven-surefire-plugin
  19. 密码加盐(盐值salt)
  20. 选赵敏还是选小昭,这可真是个问题 | Decision Tree

热门文章

  1. 【TCAX模板】Little Busters! OP(单段版+两段版:中日双语特效)
  2. 为什么00后不把工作当饭碗,却在背后偷偷努力?
  3. python flask 实现电脑屏幕实时共享
  4. 2023五一出游数据报告.pdf(附下载链接)
  5. 最新百度网盘群组分享平台源码
  6. 计算机默认快捷键怎么修改,怎样修改电脑快捷键设置知道的能告诉下吗
  7. CPU的功能和组成(计算机组成原理)
  8. Python中__slots__的使用
  9. Redis缓存预热、缓存穿透、缓存击穿、缓存雪崩,Redis布隆过滤器怎么实现?
  10. win10安装framework 3.5 错误代码0x800f0954 和 0x80070422 解决方法