项目有个隐藏和显示内容的需求,在网上找JQUERY插件很久。没发现合适的。然后干脆自己写一个,支持cookie。实现的效果如下:

代码如下:

 //功能:实现HTML控件隐藏和显示,自动在控件上附加拉伸箭头,可实现水平拉伸和垂直拉伸。WUZHU
//参数:xy:配置拉伸方向。'x'表示水平方向拉伸。'y'表示垂直方向拉伸。
//      speed:配置速度,数值越小,拉伸速度越快。
//      zindex:配置图层显示层次。默认为0。
//      position:css的position属性,可以用relative、absolute、fixed。默认是relative。可设置该属性与周边控件显示相符合
//      cookie:设置是否启用cookie,默认为true。启用后刷新页面控件的隐藏和显示不会恢复初始状态
//      copycss:是否复制对象CSS,其中的宽和高会被忽略掉。默认为FALSE
//引用:需引用itoggle.css样式文件,本插件文件,当然还有必须的JQUERY。
//例子:
//        $("#test").itoggle({//            xy:'x',
//            speed:50
//            });
//备注:未全方面测试过。
(function ($) {var Obj = {};Obj.open = {};Obj.close = {};Obj.openCss = '';Obj.closeCss = '';Obj.width = 0;Obj.height = 0;var position = {}; //当前元素位置上下文position.pre = false; //当前元素前同级元素position.next = false; //当前元素后同级元素position.parent = false; //当前元素父元素position.enable = true; //是否起作用。position.css = ''; //当前元素样式position.style = '';//COOKIE对象var Cookie = {getCookie: function (c_name) {if (document.cookie.length > 0) {c_start = document.cookie.indexOf(c_name + "=");if (c_start != -1) {c_start = c_start + c_name.length + 1;c_end = document.cookie.indexOf(";", c_start);if (c_end == -1) c_end = document.cookie.length;return unescape(document.cookie.substring(c_start, c_end));}}return false;},setCookie: function (c_name, value, expiredays) {var exdate = new Date();exdate.setDate(exdate.getDate() + expiredays);document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());},deleteCookie: function (c_name) {var exp = new Date();exp.setTime(exp.getTime() - 1);var cval = this.getCookie(c_name);document.cookie = c_name + "=" + cval + "; expires=" + exp.toGMTString();}};var Serialize = function (obj) {switch (obj.constructor) {case Object:var str = "{";for (var o in obj) {str += "\"" + o + "\":" + Serialize(obj[o]) + ",";}if (str.substr(str.length - 1) == ",")str = str.substr(0, str.length - 1);return str + "}";break;case Array:var str = "[";for (var o in obj) {str += Serialize(obj[o]) + ",";}if (str.substr(str.length - 1) == ",")str = str.substr(0, str.length - 1);return str + "]";break;case Boolean:return "\"" + obj.toString() + "\"";break;case Date:return "\"" + obj.toString() + "\"";break;case Function:break;case Number:return "\"" + obj.toString() + "\"";break;case String:return "\"" + obj.toString() + "\"";break;}}var Method = {init: function (options) {// return this.each(function () {debuggervar $this = $(this);position.pre = $(this).prev();position.next = $(this).next();position.parent = $(this).parent();position.css = $(this).attr('class');position.style = $(this).attr('style');var settings = $this.data("itoggle");if (typeof settings === "undefined") {//默认配置var defaults = {xy: 'x',speed: 1000,zindex: 0,position: 'absolute',cookie: false,copycss: false};settings = $.extend({}, defaults, options[0]);$this.data("itoggle", settings);} else {settings = $.extend({}, settings, options[0]);}Obj.width = $this.width();Obj.height = $this.height();var $container = $("<div class='container'></div>");var $icons = $("<div class='icons'></div>");var $iconscontainer = $("<div class='iconscontainer'></div>");$iconscontainer.append($icons);if (settings.xy == 'x') {//水平拉伸Obj.open = { width: Obj.width };Obj.openCss = 'xopen';Obj.close = { width: 0 };Obj.closeCss = 'xclose';$iconscontainer.css({ height: Obj.height / 2 - 2, 'padding-top': Obj.height / 2 }); //小图标垂直居中$this.css({ 'float': 'left' }); //小图标和对象元素水平并排$iconscontainer.css({ 'float': 'left' });$container.append($this); //水平拉伸时候小图标在对象元素右边
                $container.append($iconscontainer);}if (settings.xy == 'y') {//垂直拉伸Obj.open = { height: Obj.height };Obj.openCss = 'yopen';Obj.close = { height: 0 };Obj.closeCss = 'yclose';$iconscontainer.css({ width: Obj.width / 2 - 2, 'padding-left': Obj.width / 2 }); //小图标水平居中
                $container.append($iconscontainer);$container.append($this); //垂直拉伸时候小图标在对象元素上边
}$icons.addClass(Obj.openCss);$this.addClass('this');$this.css({ 'white-space': 'nowrap' });$container.css({ 'z-index': settings.zindex, 'position': settings.position });// delete position.css.width;//  delete position.css.height;//复制样式到新的容器中,去除宽高if (settings.copycss) {if (position.css != undefined) {$container.attr("class", position.css);}if (position.style != undefined) {$container.attr("style", position.style);$container.css('width', '');$container.css('height', '');}}//判断原来元素所在位置,然后将新的元素插入容器中if (position.pre.length > 0 && position.enable) {position.pre.after($container);position.enable = false;}if (position.next.length > 0 && position.enable) {position.next.before($container);position.enable = false;}if (position.parent.length > 0 && position.enable) {position.parent.append($container);position.enable = false;}if (position.enable) {$('body').append($container);position.enable = false;}if (settings.cookie) {//获取cookie记录结果var this_style = Cookie.getCookie($this.id + '_this_style');var icons_css = Cookie.getCookie($this.id + '_icons_css');if (this_style)$this.css(eval("(" + this_style + ")"));if (icons_css)$icons.addClass(icons_css);if ($icons.hasClass('xclose') || $icons.hasClass('yclose'))//判断是否为关闭状态$this.addClass('closed')}$icons.bind("click", function (e) {if ($this.hasClass('closed')) {  //有closed类,表示已关闭,现在展开$this.removeClass('closed').show().animate(Obj.open, settings.speed, function () {if ($icons.hasClass(Obj.closeCss))$icons.removeClass(Obj.closeCss);$icons.addClass(Obj.openCss);if (settings.cookie) {//cookie记录操作后结果Cookie.setCookie($this.id + '_this_style', Serialize(Obj.open));Cookie.setCookie($this.id + '_icons_css', Obj.openCss);}});} else {$this.addClass('closed').animate(Obj.close, settings.speed, function () {if ($icons.hasClass(Obj.openCss))$icons.removeClass(Obj.openCss);$icons.addClass(Obj.closeCss);$this.hide();if (settings.cookie) {//cookie记录操作后结果Cookie.setCookie($this.id + '_this_style', Serialize(Obj.close));Cookie.setCookie($this.id + '_icons_css', Obj.closeCss);}});}});return this;// });
        }};$.fn.itoggle = function () {var m = arguments[0];if (Method[m]) {m = Method[m];arguments = Array.prototype.slice.call(arguments, 1);} else if (typeof m === "object" || !m) {m = Method.init;} else {$.error("方法" + m + "不存在");return this;}return m.call(this, arguments);}})(jQuery)

View Code

样式如下:

.icons
{cursor:pointer; }.container{}.iconscontainer{position:relative;border: 1px solid #95B8E7;background-color:#E9F2FF;}.this
{position:relative;}.xopen{background:url('layout_arrows.png') no-repeat 0 0; width:16px;height:16px;}.xclose{background:url('layout_arrows.png') no-repeat 0 -16px; width:16px;height:16px;}
.yopen
{background:url('layout_arrows.png') no-repeat -16px -16px;width:16px;height:16px;
}
.yclose
{background:url('layout_arrows.png') no-repeat -16px 0;width:16px;height:16px;}
.closed
{display: none;
}

相关图片:

转载于:https://www.cnblogs.com/localwz/p/4521570.html

原生态水平和垂直拉伸的JQUERY插件相关推荐

  1. 2011年的32有用的jQuery插件

    jQuery插件真正为开发人员很有帮助,今天分享的插件有很多你没有见到过的,但是非常实用的.这32个有用的的插件对你的开发很有帮助.如果你喜欢这些jQuery插件,记得收藏, JQUERY插件 jRu ...

  2. 提升你网站水平的 jQuery 插件推荐

    jQuery是一个优秀JavaScript库,它简化了HTML文档遍历,事件处理,动画和Ajax交互. jQuery的确改变了很多人写JavaScript的方式.如今,有很多现成的jQuery插件可供 ...

  3. html纵向固定导航菜单代码,jQuery和css3响应式垂直固定导航菜单插件

    这是一款非常实用的jQuery和css3响应式垂直固定导航菜单插件.当你的页面上有很多的内容,用户需要花费大量的时间才能找到他们想要的内容.这个垂直固定导航菜单插件能够为页面提供一个内容预览,使用户能 ...

  4. 时间记录html,jquery水平、垂直时间线记录jQuery Timelinr

    jquery水平.垂直时间线记录jQuery Timelinr效果.可以记录整个历史记录,相当不错的效果. $(function(){ $().timelinr(); }); $(function() ...

  5. jquery水平垂直居中_Java Web应用程序集成的jQuery UI选项卡(水平和垂直)示例

    jquery水平垂直居中 jQuery UI is built on top of jQuery JavaScript Library to help web developers in creati ...

  6. html幻灯片图片轮播w3,支持30+种类型幻灯片|轮播图|旋转木马的强大jQuery插件

    jssor slider是一款功能非常强大的可制作超过30种不同类型的幻灯片|轮播图|旋转木马的jQuery插件.jssor具有高性能,轻量级,跨浏览器等特点,它可以支持IE6+的浏览器,并且可以支持 ...

  7. Lazy Load, 延迟加载图片的 jQuery 插件 - NeoEase

    Lazy Load, 延迟加载图片的 jQuery 插件 - NeoEase Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器 ...

  8. Web 开发最有用的 jQuery 插件集锦

    一.Responsive SlideShow--图片滑块展示 1.Responsive Carousel responsive-carousel 是一个内容传送带插件,支持鼠标.触摸和键盘操作.默认包 ...

  9. jQuery:收集一些基于jQuery框架开发的控件/jquery插件2

    Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. 主页:http://letmehaveblog.blogspot.com/2007/10/ ...

最新文章

  1. 16行代码AC_【第十届蓝桥杯省赛c/c++B组真题解析】7.完全二叉树的权值
  2. 按 结构记录的 相关字段 快速排序
  3. 使用xslt批量修改xml 节点name
  4. 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题
  5. Java 进阶——自动装箱和自动拆箱
  6. left join嵌套selelct语句格式_SQL Formatting Rule 格式化行业规范
  7. vnpy学习_06回测结果可视化改进
  8. 外文翻译 matlab与矩阵处理,外文文献及译 MATLAB 介绍.doc
  9. JavaScript-this指向问题
  10. Ajax 1.0 中使用web控件调用后台方法的用法.
  11. 1. 第一个lavarel 项目
  12. 2019美赛A题—学习记录
  13. 利用图像来测量的技术——数字图像相关法(DIC)
  14. 股票大作手操盘术[图解]
  15. Java实现简单电子邮件的发送
  16. sql基础语法,非常全建议收藏(大白菜程序猿欢迎大家关注)
  17. 虚拟服务器14001,免费秒赞主机空间
  18. 如何查看Dell笔记本型号?
  19. bmob项目php后端,bmob开发文档-Bmob移动后端云服务平台
  20. 9999*9999这样的命令在python中无法运行_智慧树形势与政策2018章节答案

热门文章

  1. Mybatis的批量插入的正确姿势
  2. Python二级考试公共基础知识
  3. 13、app.json - 小程序端配置文件 - 微擎小程序模块应用开发
  4. 江浙沪计算机调剂,往年有调剂缺额的江浙沪985/211,竞争较小
  5. 报错: java.lang.IllegalArgumentException: mapper [categoryName] of different type, current_type [text]
  6. 微信小程序navigationBarTitleText导航栏标题设置
  7. C语言结构体复习(一)
  8. Python入门之控制结构-顺序与选择结构
  9. 高数笔记(一):函数与极限,无穷大与无穷小
  10. AS下解决Gradle dependencies compile jar包冲突、重复问题