JGUI源码:JS菜单动态绑定(8)
我们知道Jquery绑定事件后的新添加的对象是不响应事件的,为了解决这个问题,动态添加的对象需要从新绑定,使用一个init方法实现代码如下
//Accordion封装
(function($) {
J.Accordion = function($p_selector) {
init = function(p_options, p_datas, p_param) {
return $p_selector.each(function() {
var $accordion = $(this);
var datas = $accordion.extend(
{
_sumdelta: 0,
_mouseintervalhandle: undefined,
_startmousewheeldatetime: null
},
p_datas
);
var events = {
onNavItemClick: undefined
};
$accordion.data("datas", datas);
$accordion.data("events", events);
//Accordion目录点击绑定
$accordion.find("dt.jgui-accordion-navitem").unbind("click"); //先解绑
$accordion.find("dt.jgui-accordion-navitem").click(function(event) {
var $accordionnavitem = $(this);
if ($accordion.data("events").onNavItemClick != undefined) {
var ret = $accordion.data("events").onNavItemClick(this);
if (ret == false) return;
}
$accordionnavitem.removeClass("selected");
$accordionnavitem.siblings("dd").slideToggle(300, function() {
if ($(this).is(":hidden")) {
$(this)
.siblings("dt")
.children()
.children(".jgui-accordion-navitem-more")
.removeClass("expanded", 0);
} else {
$(this)
.siblings("dt")
.children()
.children(".jgui-accordion-navitem-more")
.addClass("expanded", 0);
}
});
$accordionnavitem
.closest(".jgui-accordion")
.find(".jgui-accordion-navitem")
.removeClass("selected");
$accordionnavitem
.closest(".jgui-accordion")
.find(".jgui-accordion-navitem-child")
.removeClass("selected");
$accordionnavitem.addClass("selected");
stopPropagation(event);
});
//Accordion内容条目点击绑定
$accordion.find(".jgui-accordion-navitem-child").unbind("click");
$accordion.find(".jgui-accordion-navitem-child").click(function(event) {
var $accordionnavitemchild = $(this);
$accordionnavitemchild
.closest(".jgui-accordion")
.find(".jgui-accordion-navitem")
.removeClass("selected");
$accordionnavitemchild
.closest(".jgui-accordion")
.find(".jgui-accordion-navitem-child")
.removeClass("selected");
$accordionnavitemchild.addClass("selected");
stopPropagation(event);
});
//手机端鼠标拖动事件,手机端可以屏蔽下面改成用css3隐藏滚动条,毕竟手机端不用考虑兼容性
$accordion.unbind("touchstart");
$accordion.on("touchstart", function(e) {
startY = e.originalEvent.changedTouches[0].pageY;
});
$accordion.unbind("touchmove");
$accordion.on("touchmove", function(e) {
e.preventDefault();
(moveEndY = e.originalEvent.changedTouches[0].pageY),
(Y = moveEndY - startY);
startY = moveEndY;
var cur_top = $accordion.scrollTop(); //当前滚过的高度
$accordion.stop().animate({ scrollTop: -Y + cur_top }, 0);
});
});
};
//折叠成工具条样式
fold = function() {
return $p_selector.each(function() {
var $accordion = $(this);
$accordion
.find(".jgui-accordion-navitem")
.siblings("dd")
.slideUp();
$accordion.find(".jgui-accordion-navitem span").hide();
$accordion
.find(".jgui-accordion-navitem .jgui-accordion-navitem-more")
.hide();
});
};
//展开成面板样式
unfold = function() {
return $p_selector.each(function() {
var $accordion = $(this);
$accordion
.find(".jgui-accordion-navitem-more.expanded")
.closest(".jgui-accordion-navitem")
.siblings("dd")
.slideDown();
$accordion.find(".jgui-accordion-navitem span").show();
$accordion
.find(".jgui-accordion-navitem .jgui-accordion-navitem-more")
.show();
});
};
return {
init: init,
fold: fold,
unfold: unfold
};
};
})(J.$);
当使用ajax向according里添加html数据后,可以调用一次init即可实现从新绑定(先unbind,再bind)。
示例:J.Accordion($(".jgui-accordion")).init();
如果后期优化,可以判断哪些绑定过的不再绑定。另外为了通知外部页面点击了NavItem操作,做了一个回调函数
//NavItem点击事件
var events = $('#menuaccordion').data("events");
events.onNavItemClick=function (obj)
{
if (!$("#leftpanel").is(".unfold")) {//折叠状态展开
$("#leftpanel").width(300);
$("#centerpanel").css("left", "300px");
$("#mainlogo").html("JGUI DEMO");
J.Accordion($(obj).closest(".jgui-accordion")).unfold();
$("#leftpanel").toggleClass("unfold");
$("#folderbtn").toggleClass("icon-menu-unfold icon-menu-fold");
return false;
}
};
这样就可以在外部响应点击事件。
JGUI源码:JS菜单动态绑定(8)的更多相关文章
- JGUI源码:从头开始,建一个自己的UI框架(1)
开篇 1.JGUI是为了逼迫自己研究底层点的前端技术而做的框架,之前对web底层实现一直没有深入研究,有了技术瓶颈,痛定思痛从头研究, 2.虽然现在vue技术比较火,但还在发展阶段,暂时先使用JQue ...
- JGUI源码:鼠标中键滚动再次优化(5)
//电脑端中键滚动事件 var mousewheel = getBrowserInfo() == "Firefox" ? "DOMMouseScroll" : ...
- JGUI源码:Accordion鼠标中键滚动和手机端滑动实现(2)
本文是抽屉组件在PC端滚动鼠标中键.手机端滑动时,滚动数据列表实现方法,没有使用iscroll等第三方插件,支持火狐,谷歌,IE8+等浏览器. 演示在:www.jgui.com Github地址:ht ...
- JGUI源码:右键菜单实现(12)
1.要想实现右键菜单,就要先能响应右键函数 $('#down').mousedown(function(e){ if(3 == e.which){ alert('这是右键单击事件'); }else i ...
- JGUI源码:实现图标按钮及下拉菜单(16)
效果如下 代码片段如下 <div class="jgui-btn" id="personalbtn" style="float:right;&q ...
- JGUI源码:组件及函数封装方法(7)
以Accordion为例1.在base.js定义一个对象,这样可以和JQuery对象区分开,用户使用组件时比较清晰一点,也可以在这里引用多个库. var JGUI = J = { version : ...
- JGUI源码:实现简单MVVM单项绑定学习笔记(15)
前面几节都是jquery界面方面的东西,本节研究些数据方面的东西:MVVM. MVVM由三部分组成:Model <=> ViewModel <=> View,当Model数据改 ...
- JGUI源码:响应式布局简单实现(13)
首先自我检讨下,一直没有认真研究过响应式布局,有个大致概念响应式就是屏幕缩小了就自动换行或者隐藏显示,就先按自己的理解来闭门造车思考实现过程吧. 1.首先把显示区域分成12等分,bootstrap是这 ...
- JGUI源码:Accordion折叠到侧边栏实现(6)
折叠和非折叠效果如左右图所示 代码如下 //折叠 $.fn.jAccordionfold = function() { return this.each(function() { var obj = ...
随机推荐
- linux 系统shell运行程序不退出
如果通过ssh远程连接到linux系统终端,在shell下执行程序.假如程序名称为app,且程序本身会一直执行不退出,程序执行需要参数文件paramfile. 当我们用 ./app paramfile ...
- Clion快捷键
快捷键配置 File->Setting->Keymap->Keymaps 选择Visual Studio风格 代码提示的匹配模式 File->Setting->Edito ...
- 《JAVA程序设计》_第六周学习总结
一.本周学习内容 1.内部类--7.1知识 在一个类的内部定义的类成为内部类,包含内部类的类叫做外嵌类 内部类和外嵌类的关系 外嵌类的成员变量在内部类中仍然有效,内部类也可调用外嵌类中的方法 内部类的 ...
- 003_python中key为中文的处理
由于统计域名资产信息时,部门名称是中文的,但是还需要用这个部门名称进行字符的匹配运算,但不进行转换处理的话,它会报以下的错误: 解决方法如下: # -*- coding: utf-8 -*- all_ ...
- 【微信小程序】
按照惯例,学习一门新技术或者新框架,咱们还是从官方提供的文档开始 微信小程序官方教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ 微信小程序开发流程(博客): ...
- 分布式存储ceph——(4)ceph 添加/删除osd
一.添加osd: 当前ceph集群中有如下osd,现在准备新添加osd:
- Swagger 报错 no mapping found for http request with uri [/***/swagger-ui.html] in dispatcherservlet with name '***'
swagger报错: no mapping found for http request with uri [/***/swagger-ui.html] in dispatcherservlet wi ...
- 关于配置ssh免密码登录后,仍提示输入密码
一.在A端创建密钥对: [root@A ~] -P '' 二.如果B机器没有.ssh和authorized_keys文件则创建这个文件夹和文件先,创建后要chown改成当前用户的所属者,其次也要改: ...
- python实现对文件的全量、增量备份
#!/user/bin/env python # @Time :2018/6/6 10:10 # @Author :PGIDYSQ #@File :FileBackup2.py import os i ...
- Markdown语法基础
Markdown基本语法 创建 2018-09-07 by YANHAI 标题:Setext方式 三个或更多 大标题 === 小标题 --- 大标题 小标题 标题:Atx方式 # 内容 (一级标题) ...