有些插件用了就想不起来了,整理在收藏夹太多太乱,想写点简介也不方便;
曾做了一个类似导航页的单页面,但是维护起来还是太麻烦;
就整理在这篇博客里,会持续更新。
为了做一个可拖拽排序的列表,查找了相关drag插件,比较好用的记录如下。
但其实最后也没有达到理想的效果,Muuri简单易用,拖拽动画等也非常完美,但是不能多选拖动;Multi Drag可多选拖动,但不支持grid布局。
如果有用过或写过同时具备二者优点的插件,还请不吝指点,谢谢。
实例:
基于colResizable-1.6实现一个表头固定、列宽可调的table
实现一个中间可拖动,改变两侧宽度的两栏布局,比如左侧为菜单,有一个默认宽度,希望能够通过拖动调节。
通常有两种思路:
这个是我查到这篇优质博客之前未曾想到的:纯CSS实现左右拖拽改变布局大小
感觉非常棒,拖动效果非常顺滑,控制最小宽度也非常方便,只是兼容性有待考证。
这个是拿到这个需求后,首先想到的比较直接的思路,在mousedown、mousemove、mouseup事件中调整各个区块的宽度。
都大同小异,因为是汇总贴,不再列出代码,请参考:
实现左右可拖动改变宽度的div内容显示区,并且控制拖动范围
js 实现左侧菜单拖动改变宽度
左右两栏布局右侧自适应+左右拖动改变两栏宽度
$.contextMenu({
selector: '.context-menu-trigger',
callback: function(itemKey, opt, e) {
// 可以根据itemKey的不同进行不同操作
console.log('这是在全局callback触发的,点击的右键菜单项是:' + itemKey);
console.log('点击右键的元素是:');
console.log(opt.$trigger);
},
build: function($triggerElement, e) {
// 在触发右键菜单执行一些操作
// 如:将背景色改为红色
$triggerElement.css('background', 'red');
return {
items: {
"cut": {
name: "剪切",
callback: function(itemKey, opt) {
//这里的callback会覆盖全局定义的callback
console.log('这是在items上callback触发的,点击的右键菜单项是:' + itemKey);
console.log('点击右键的元素是:');
console.log(opt.$trigger);
}
},
"sep1": "---",
"copy": {
name: "复制",
disabled: function(key, opt) {
return true; //会禁用该菜单项,注意true是禁用
}
},
"paste": {
name: "粘贴(V)",
accesskey: 'V',
}
}
};
}
});
$(document).keydown(function(e) {
if (e.ctrlKey) {
if (e.keyCode == 86) {
console.log('通过快捷键触发粘贴事件');
}
}
});
设置Ctrl+C类快捷键提醒的方法:
修改jquery.contextMenu.js方法:
在大概1136行createNameNode方法中增加span标签,样式为context-menu-accesskey-right-快捷键字母
:
function createNameNode(item) {
var $name = $('');
if (item._accesskey) {
// ...
// 增加右键菜单右侧快捷键说明
$('')
.addClass('context-menu-accesskey-right-' + item._accesskey)
.appendTo($name);
} else {
// ...
}
return $name;
}
如果不想完全依赖accesskey的话,可以这样修改:
function createNameNode(item) {
var $name = $('');
// ...
// 增加右键菜单右侧快捷键说明
if (item._accesskey || item.accesskeyDesc) {
$('')
.addClass('context-menu-accesskey-right-'+(item._accesskey || item.accesskeyDesc))
.appendTo($name);
}
return $name;
}
右键菜单定义时这样写即可:
"paste": {
name: "粘贴",
accesskeyDesc: 'V',
}
然后定义对应样式,如Ctrl+V样式:
.context-menu-accesskey-right-V:after{
content: "Ctrl+V";
float: right;
}
width
说明:只能设置single bar的宽度,其实稍微一想发现本来只需要设置single bar的宽度,总宽度自然就固定了,不要试图去设置总宽度,也不要给生成的img、svg、canvas设置宽度,以免造成拉伸模糊甚至无法识别。