对于多按钮事件,肯定不能用传统的给每个按钮绑定个事件,太多了后期维护成本非常大,头也晕,我们可通过控制数据来渲染触发事件。
html代码给除外层包裹标签即可
<body>
<div class="warp">
<div class="toolbar"></div>
</div>
</body>
我们通过JavaScript 数据来控制按钮内容个数、事件、是否隐藏、是否是切换按钮、等操作,数据如下:
$(function(){
var toolbar = {
show: true, // 是否显示
backgroundColor: '#fff', //背景颜色
height: "60px", // 高度
width: "100%", // 宽度
btns: [
{
id: 'btn1', //按钮 id
name: '按钮1', // 按钮名称
icon: 'btn1', //按钮图标 可使用字体图标
isSwitch: true, //是否开关,可相互切换
switchOn: false, //isSwitch为true时使用用
isShow: true, // 是否显示
disabled: true // 是否不可点击,禁用状态
},
{
id: 'btn2',
name: '按钮2',
icon: 'btn2',
isSwitch: true,
switchOn: false,
isShow: true,
disabled: true
},
]
};
}
现在不管有多少个按钮,按钮是什么形式,我们都可以通过这个toobar对象来控制,更方便管理。还可以通过后台来输出toobar数据。
现在我们要对toobar对象数据进行判断,循环输出到页面上。渲染出来。
1、通过toobar.show 判断他是否显示还是隐藏。
2、给toobar赋上style样式,让页面按照toobar对象的数值来显示样式。
var toolbarHander = {
// 渲染toolbar
renderToolbarHtml: function(){
if(toolbar && toolbar.show){
$(".toolbar").css({
"width": toolbar.width ? toolbar.width : '100%',
"height": toolbar.height ? toolbar.height : '40px',
"background-color": toolbar.backgroundColor ? toolbar.backgroundColor : '#acb2bf',
'color': toolbar.color ? toolbar.color : '#FFF',
}).show();
}
}
}
3、我们要针对boobar.btns 进行循环输出到页面上。记得把btns的数据赋值到标签的自定义属性上。
var toolbarHander = {
// 渲染toolbar
renderToolbarHtml: function(){
var toolbarHtml = '';
$(toolbar.btns).each(function () {
toolbarHtml += toolbarHander.renderButton(this);
});
$('.toolbar').html(toolbarHtml);
},
/**
* 渲染单个按钮
* @param {object} btnOptions
*/
renderButton: function (btnOptions) {
var hide = btnOptions.isShow === false ? ' item-hide' : '';
var html = '',
css = '',
optonsString = toolbarHander.optionsToString(btnOptions);
if (btnOptions.switchOn) {
css += 'toolbar-item-selected';
}
html += '<button title="' + btnOptions.name + '" id="toolbarItem_' + btnOptions.id + '" class="toolbar-item'+hide+' '+ css +' " options="' + optonsString + '">' +
'<i class="icon icon-' + btnOptions.icon + '"></i>' +
'<span class="">'+ btnOptions.name +'</span>' +
'</button>';
return html;
},
}
4、进行点击按钮,从自定义属性拿到相应的值,进行事件操作。单个按钮多事件切换,因根据自定义属性的值判断后,重新渲染下button数据。
// 渲染toolbar
renderToolbarHtml: function(){
if(toolbar && toolbar.show){
$('.toolbar').on('click', '.toolbar-item', function (e) {
var optionsString = $(this).attr('options'),
options = toolbarHander.optionsToJson(optionsString);
try {
__handler[options.id].call(this, e, options);
} catch (error) {
console.error(error);
}
});
}
}
/**
* 封装按钮处理方法,加'__'下划线,防止污染window全局
* 回调方法key值必须是按钮id
*/
var __handler = {
/**
* 按钮1
*/
btn1: function (e, options){
if (options.isSwitch) {
if (options.switchOn) {
options.switchOn = false;
options.name = 'btn1';
options.icon = 'btn2';
} else {
options.switchOn = true;
options.name = 'btn1关';
options.icon = 'btn1';
}
toolbarHander.refreshButton(options);
}
},
/**
* 按钮2
*/
btn2: function (e, options){
if (options.isSwitch) {
if (options.switchOn) {
options.switchOn = false;
options.name = 'btn2';
options.icon = 'btn1';
} else {
options.switchOn = true;
options.name = 'btn2关';
options.icon = 'btn2';
}
toolbarHander.refreshButton(options);
}
},
}
代码已上传gitee,需要的朋友去看看 gitee地址
本文来源于个人博客,查看更多 个人博客