先来看DEMO:https://codepen.io/jonechen/pen/regjGG

插件的开发很简单,运用了CSS3的动画效果,并且弹出框的内容可以自定义。插件的默认配置参数有三个:

var defaults = {
event: 'click', // 默认点击事件
dialogBox: 'selector', // 弹出框容器
hover: false, // 默认滑动事件关闭
}

CSS部分:

*{padding: 0; margin: 0; list-style: none;font:14px/1.8 "microsoft yahei";}
body{background: #505050}
.btn{margin: 0 auto;width: 80px; }
.btn a{display:block; text-decoration: none; background: red;color: #fff; text-align: center; height: 40px;line-height: 40px; }
.box{width: 500px;height: 100px;border:1px solid #ccc;padding: 10px; display: none; }

HTML部分:

<div class="btn"><a href="#">点击我</a></div>

<div class="box">
这是弹出内容
</div>

JS插件部分:

/***
by jone 2016.5.17
***/
(function($) {
$.fn.dropMenu = function(options) {
var defaults = {
event: 'click', // 默认点击事件
dialogBox: 'selector', // 弹出框容器
hover: false, // 默认滑动事件关闭
}
var obj = $.extend(defaults, options);
this.each(function() {
var me = $(this);
me.parent().css('position', 'relative');
var wrapper = '<div class=\'wrapper\'><div class=\'space\'><i></i><em></em></div></div>';
me.parent().append(wrapper);
var _box = me.parent().find('.wrapper');
obj.dialogBox.show().appendTo(_box);
_box.css({
position: 'absolute',
top: me.outerHeight() + 11,
boxShadow: '0 0 5px rgba(0,0,0,0.05)',
transition: 'all 0.15s ease-in-out 0s',
visibility: 'hidden',
transformOrigin: 'left top',
transform: 'scale(0)',
background: '#fff',
});
_box.find('.space').css({
width: '100%',
height: '11px',
position: 'absolute',
top: '-11px',
left: 0
})
var borderColor = obj.dialogBox.css('borderColor');
_box.find("i,em").css({
content: " ",
borderColor: 'transparent transparent ' + borderColor + ' transparent',
borderStyle: 'solid',
borderWidth: '11px 8px',
display: 'block',
width: 0,
height: 0,
lineHeight: 0,
fontSize: 0,
position: 'absolute',
left: me.parent().outerWidth() / 2 - 10,
top: '-10px',
})
_box.find("em").css({
borderColor: 'transparent transparent #fff transparent',
top: '-8px',
})
var parentsWidth = me.parent().parent().innerWidth()
var parentWidth = me.parent().outerWidth();
var offsetWidth = me.parent().offset().left;
if (offsetWidth >= parentsWidth - parentWidth) {
_box.css({
right: 0,
transformOrigin: 'right top',
});
console.log(_box.outerWidth());
_box.find("i,em").css({
left: _box.outerWidth() - me.parent().outerWidth() - 10 + me.parent().outerWidth() / 2
})
}
if (!obj.dialogBox || obj.dialogBox === undefined) {
throw "error:obj.dialogBox is not defind";
return
} me.on(obj.event, function() {
var display = _box.css('visibility');
if (display == 'hidden') {
_box.css({
visibility: 'visible',
transform: 'scale(1)'
})
} else {
_box.css({
visibility: 'hidden',
transform: 'scale(0)'
})
}
});
if (obj.hover == true) {
me.off(obj.event);
me.on('mouseenter', show);
me.on('mouseleave', hide);
_box.on('mouseenter', show);
_box.on('mouseleave', hide);
} function show() {
_box.css({
visibility: 'visible',
transform: 'scale(1)'
})
}; function hide() {
_box.css({
visibility: 'hidden',
transform: 'scale(0)'
})
};
});
}
})(jQuery)

插件调用方法:

// 插件调用
$(function() {
$(".btn a").dropMenu({
dialogBox: $(".box"),
})
})

插件下载:jQuery.dropMenu.js

jQuery+css3弹出框插件的更多相关文章

  1. jQuery zxxbox弹出框插件(v3.0)

    插件地址: http://www.zhangxinxu.com/study/201009/jquery-zxxbox-v3-demo.html

  2. 弹出框插件layer使用

    layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验. 插件官方地址:http://layer.layui.co ...

  3. 弹出框插件——dialog

    基于jquery和dot.js弹出框插件,兼容IE6+等其他浏览器. 思想:弹出框元素插入body节点中,并在页面垂直居中显示(fixed定位),触发确定和关闭事件绑定. 注意ie6包含两个问题:一. ...

  4. js简单显示和隐藏div,触发超链接,动态更改button值,setInterval()简单使用,jquery easyui弹出框简单使用 .

    js简单显示和隐藏div .<!DOCTYPE html> .<html> .<head> .<meta charset="UTF-8"& ...

  5. JS弹出框插件zDialog再次封装

    zDialog插件网址:http://www.jq22.com/jquery-info2426 再次封装zDialog的代码: (function ($) { $.extend({ iDialog: ...

  6. js登录弹出框插件

    第一步:页面引入css:<link rel="stylesheet" type="text/css"" href="common/cs ...

  7. jquery.reveal弹出框

     一款js弹出框,嵌入其它页面: 引用: <script src="../../js/jquery.reveal.js" type="text/javascript ...

  8. 写了一个jquery的 弹出层插件。

    下载地址:http://pan.baidu.com/s/1eQ26CMm ps:ajax加载做的,要有环境才能正常运行哦! //这是一个以ajax加载显示弹出层插件  参数(option): widt ...

  9. layer弹出框插件参数及方法介绍

    layerui下载:http://www.layui.com 更多参数请阅读开发文档:http://www.layui.com/doc/modules/layer.html Layui 是一款采用自身 ...

随机推荐

  1. Python之路【第二篇】:Python基础(一)

    一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? ...

  2. Android异常一、异步任务导致的窗口句柄泄漏问题(转)

    05-05 10:36:41.009: E/WindowManager(4243): Activity com.tao.MyActivity has leaked window com.android ...

  3. 安装C-Kermit串口访问开发板

    linux下的串口调试工具主要有minicom和kermit. minicom的安装与使用见博文: http://www.cnblogs.com/tanghuimin0713/p/3562218.ht ...

  4. javascript中for/in循环及使用技巧

    JavaScript 支持不同类型的循环: for - 循环代码块一定的次数 for/in - 循环遍历对象的属性 while - 当指定的条件为 true 时循环指定的代码块 do/while - ...

  5. 前端代码优化: 使用YUI Compressor

    通过压缩组件,可以显著减少HTTP请求和响应事件.这也是减小页面大小最简单的技术,但也是效果最明显的. 压缩JS,CSS代码有几种常用插件,YUI Compressor是个不错的选择.通过maven的 ...

  6. POJ C程序设计进阶 编程题#5:细菌分组实验

    编程题#5:细菌实验分组 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有 ...

  7. wget下载FTP的文件

    在Linux中我们怎么样实现wget来下载文件  下面例子 下载所有的py结尾的文件到当前目录 wget ftp://anymous:anymous@42.51.152.2/soft/*.py 递归的 ...

  8. Cookie与Session的一些总结

    一.Cookie: Cookie主要存储一些不敏感的数据,只能存储字符串类型 执行过程: (1)第一次请求: 客户端将数据(比如用户名)以请求报文的形式请求服务器端响应, 服务器端得到数据(用户名), ...

  9. css半透明

    filter:alpha(opacity=80); /*支持 IE 浏览器*/-moz-opacity:0.80; /*支持 FireFox 浏览器*/opacity:0.80; /*支持 Chrom ...

  10. c#反射机制学习和利用反射获取类型信息

    反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...