本文概述
- A. jQuery版本
- B.VanillaJS版本
在本文中, 我们将向你说明如何使用jQuery或Vanilla JavaScript在浏览器窗口中调整ACE Editor的单个或多个实例的大小。
A. jQuery版本建议使用jQuery处理Ace Editor的大小调整功能, 因为在鼠标事件期间易于编写代码和动画(看上去比Vanilla JS版本更漂亮)。首先, 创建一个全局可访问对象, 该对象将存储要调整大小的ace编辑器实例的拖动状态。然后, 包括makeAceEditorResizable函数, 如下所示:
/** * Global variable to store the ids of the status of the current dragged ace editor. */window.draggingAceEditor = {};
function makeAceEditorResizable(editor){var id_editor = editor.container.id;
var id_dragbar = '#' + id_editor + '_dragbar';
var id_wrapper = '#' + id_editor + '_wrapper';
var wpoffset = 0;
window.draggingAceEditor[id_editor] = false;
$(id_dragbar).mousedown(function(e) {e.preventDefault();
window.draggingAceEditor[id_editor] = true;
var _editor = $('#' + id_editor);
var top_offset = _editor.offset().top - wpoffset;
// Set editor opacity to 0 to make transparent so our wrapper div shows_editor.css('opacity', 0);
// handle mouse movement$(document).mousemove(function(e){var actualY = e.pageY - wpoffset;
// editor heightvar eheight = actualY - top_offset;
// Set wrapper height$(id_wrapper).css('height', eheight);
// Set dragbar opacity while dragging (set to 0 to not show)$(id_dragbar).css('opacity', 0.15);
});
});
$(document).mouseup(function(e){if (window.draggingAceEditor[id_editor]){var ctx_editor = $('#' + id_editor);
var actualY = e.pageY - wpoffset;
var top_offset = ctx_editor.offset().top - wpoffset;
var eheight = actualY - top_offset;
$( document ).unbind('mousemove');
// Set dragbar opacity back to 1$(id_dragbar).css('opacity', 1);
// Set height on actual editor element, and opacity back to 1ctx_editor.css('height', eheight).css('opacity', 1);
// Trigger ace editor resize()editor.resize();
window.draggingAceEditor[id_editor] = false;
}});
}
然后, 使用此功能, 你可以将已经初始化的ace编辑器实例转换为可调整大小的实例, 其中包括以下标记:
<
div id="editor_wrapper" class="app_editor_wrapper">
<
div id="editor" class="app_editor">
echo "Hello, this is some PHP code to edit";
<
/div>
<
div id="editor_dragbar" class="app_editor_dragbar">
<
/div>
<
/div>
请注意, 编辑器需要包装到div中, 该div具有与编辑器相同的ID, 后缀_wrapper相同。拖动栏div的编辑器ID和_dragbar的ID与后缀相同。获得标记后, 你可以轻松地初始化ace编辑器并将其转换为可调整大小的版本, 提供ace编辑器变量作为给定函数的参数:
makeAceEditorResizable(aceEditorInstance);
这样, 你的编辑器现在应该可以垂直调整大小了。
现场例子
以下代码笔向你展示了使用2个可调整大小的Ace Editor实例进行游戏的难易程度。
请参阅CodePen上的Our Code World(@ourcodeworld)的Pen Resizable ACE Editor。
B.VanillaJS版本与用jQuery编写的对应版本不同, vanillajs版本没有包含调整元素大小的不错的动画。你可以根据需要修改并添加它。该脚本的工作方式类似于jQuery脚本:
/** * VanillaJS version to make ace editor vertically resizable. * * @param editor Ace Editor instance. */function makeAceEditorResizable(editor){var id_editor = editor.container.id;
var id_dragbar = id_editor + '_dragbar';
var id_wrapper =id_editor + '_wrapper';
var wpoffset = 0;
window.draggingAceEditor[id_editor] = false;
var action_mousedown = function(e) {e.preventDefault();
window.draggingAceEditor[id_editor] = true;
// Set editor opacity to 0 to make transparent so our wrapper div showsdocument.getElementById(id_editor).style.opacity = 0;
document.addEventListener("mousemove", action_document_mousemove);
};
var action_document_mousemove = function(e){var _editor = document.getElementById(id_editor);
var rect = _editor.getBoundingClientRect();
var rsl = {top: rect.top + document.body.scrollTop};
var top_offset = rsl.top - wpoffset;
var actualY = e.pageY - wpoffset;
// editor heightvar eheight = actualY - top_offset;
// Set wrapper heightdocument.getElementById(id_wrapper).style.height = eheight;
// Set dragbar opacity while dragging (set to 0 to not show)document.getElementById(id_dragbar).style.opacity =0.15;
};
document.getElementById(id_dragbar).addEventListener("mousedown", action_mousedown);
var action_mouseup = function(e){if (window.draggingAceEditor[id_editor]){var ctx_editor = document.getElementById(id_editor);
var rect = ctx_editor.getBoundingClientRect();
var rsl = {top: rect.top + document.body.scrollTop};
var actualY = e.pageY - wpoffset;
var top_offset = rsl.top - wpoffset;
var eheight = actualY - top_offset;
document.removeEventListener("mousemove", action_document_mousemove);
// Set dragbar opacity back to 1document.getElementById(id_dragbar).style.opacity = 1;
// Set height on actual editor element, and opacity back to 1ctx_editor.style.height = eheight + "px";
ctx_editor.style.opacity = 1;
// Trigger ace editor resize()editor.resize();
window.draggingAceEditor[id_editor] = false;
}};
document.addEventListener("mouseup", action_mouseup);
}
需要相同的标记样式:
<
div id="editor_wrapper" class="app_editor_wrapper">
<
div id="editor" class="app_editor">
echo "Hello, this is some PHP code to edit";
<
/div>
<
div id="editor_dragbar" class="app_editor_dragbar">
<
/div>
<
/div>
请注意, 编辑器需要包装到div中, 该div具有与编辑器相同的ID, 后缀_wrapper相同。拖动栏div的编辑器ID和_dragbar的ID与后缀相同。获得标记后, 你可以轻松地初始化ace编辑器并将其转换为可调整大小的版本, 提供ace编辑器变量作为给定函数的参数:
makeAceEditorResizable(aceEditorInstance);
这样, 你的编辑器现在应该可以垂直调整大小了。
现场例子
以下代码笔向你展示了使用Vanilla JS使用2个可调整大小的Ace Editor实例进行播放的过程是多么容易。
请参阅CodePen上我们代码世界(@ourcodeworld)的Vanilla JS与Pen Resizable ACE Editor。
在某些使用情况下, 例如, 当整个窗口都可滚动时, JavaScript的getBoundingClientRect方法生成的偏移量可能会出现问题。
【如何使ACE Editor实例由用户使用拖放条动态调整大小】编码愉快!
推荐阅读
- JS Web开发的服务在哪里使用
- 如何使用JavaScript在浏览器中检索MP3 / WAV音频文件的持续时间
- 如何显示使用JSCH(SFTP)Android进行上传和下载的进度
- @Override注释在Java中是什么意思
- 如何在Java AWT Toolkit中更改框架的标题栏图标(应用程序图标)
- 如何在Android中使用JSCH(SFTP)列出远程路径
- 如何在Android中使用JSCH(SFTP)将文件下载到服务器
- javascript|前端图片上传时使用canvas进行图片压缩
- Spring Cloud Alibaba 系列之 Gateway(网关)