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 = ...
随机推荐
- SqlServer如何给表添加新的字段以及字段注释
语法: USE 数据库名ALTER TABLE 表名 ADD 字段名 类型 默认值 是否为空;EXEC sp_addextendedproperty N'MS_Description', N'注 ...
- Loj #2331. 「清华集训 2017」某位歌姬的故事
Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...
- 《JAVA程序设计》_第六周学习总结
一.本周学习内容 1.内部类--7.1知识 在一个类的内部定义的类成为内部类,包含内部类的类叫做外嵌类 内部类和外嵌类的关系 外嵌类的成员变量在内部类中仍然有效,内部类也可调用外嵌类中的方法 内部类的 ...
- 作业2:分布式版本控制系统Git的安装与使用
1.下载安装配置用户名和邮箱. 2. 创建工作目录并通过git init命令把这个目录变成Git可以管理的仓库. 3. 在工作目录下准备文本文件,建议下载Notepad++代替记事本. 4. 组合用g ...
- 【故障公告】推荐系统中转站撑爆服务器 TCP 连接引发的故障
上周五下午,我们在博客中部署了推荐系统,在博文下方显示“最新IT新闻”的地方显示自动推荐的关联博文.我们用的推荐系统是第四范式的推荐服务,我们自己只是搭建了一个推荐系统中转站(基于 ASP.NET C ...
- Python函数的装饰器修复技术(@wraps)
@wraps 函数的装饰器修复技术,可使被装饰的函数在增加了新功能的前提下,不改变原函数名称,还继续使用原函数的注释内容: 方便了上下文环境中不去更改原来使用的函数地方的函数名: 使用方法 from ...
- neutron二
第四篇neutron— 网络实践 一.虚拟机获取 ip: 用 namspace 隔离 DHCP 服务 Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 通过 ...
- Conda常见命令
Anaconda,Miniconda,Conda,Pip的区别: Anaconda:用于科学计算的python发行版,里面预装好了conda,某个版本的python,众多packages,科学计算工具 ...
- salesforce apex class call exteral webservice
在项目中需要调用外面的Webservice, 从Salesforce往外写入其他系统.目前一般有两种方法. 1. 根据对方提供的wsdl文件生成apex class,直接实例化后调用其方法(测试成功 ...
- SOme USeful NOtes for MYself.
SOme USeful NOtes for MYself. B站神奇的频道(YouTube里同名):关于微积分/线代/梯度下降/DL等数学知识的理解,对理解DL很有帮助 https://space.b ...