В javascript нет импорта / include / require, но есть два основных способа достижения того, что вы хотите:
1 - Вы можете загрузить его с помощью вызова AJAX, а затем использовать eval.
Это самый простой способ, но он ограничен вашим доменом из-за настроек безопасности Javascript, и использование eval открывает дверь для ошибок и хаков.
2 - Добавьте тег сценария с URL сценария в HTML.
Определенно лучший способ. Вы можете загрузить сценарий даже с внешнего сервера, и он чист, поскольку вы используете анализатор браузера для оценки кода. Вы можете поместить тег в начало веб-страницы или в нижней части тела.
Оба этих решения обсуждаются и проиллюстрированы здесь.
Теперь есть большой вопрос, о котором вы должны знать. Это означает, что вы дистанционно загружаете код.
Это означает, что если вы используете эти трюки напрямую, вы не сможете использовать недавно загруженный файл, и он будет выполнять ваш текущий скрипт, потому что он загружает все асинхронно. введите следующую строку после того, как вы попросите ее загрузить, потому что она будет по-прежнему загружаться.
EG: my_lovely_script.js содержит MySuperObject
var js = document.createElement("script");
js.type = "text/javascript";
js.src = jsFilePath;
document.body.appendChild(js);
var s = new MySuperObject();
Error : MySuperObject is undefined
Затем вы перезагружаете страницу нажатием F5 , И это работает! Смущает ...
Итак, что с этим делать?
Ну, вы можете использовать взломанный автор, предлагаемый в ссылке, которую я вам дал. Итак, для людей, которые спешат, он использует en event для запуска функции обратного вызова при загрузке сценария. Таким образом, вы можете поместить весь код с помощью удаленной библиотеки в функцию обратного вызова. EG:
function loadScript(url, callback)
{
// adding the script tag to the head as suggested before
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
// then bind the event to the callback function
// there are several events for cross browser compatibility
script.onreadystatechange = callback;
script.onload = callback;
// fire the loading
head.appendChild(script);
}
Затем вы пишете код, который хотите использовать ПОСЛЕ того, как скрипт загружается в лямбда-функцию:
var myPrettyCode = function() {
// here, do what ever you want
};
Затем вы запускаете все это:
loadScript("my_lovely_script.js", myPrettyCode);
Хорошо, я понял. Но это боль, чтобы написать все это.
Ну, в этом случае вы можете использовать как всегда фантастическую бесплатную фреймворк jQuery, которая позволяет делать то же самое в одной строке:
$.getScript("my_lovely_script.js", function() {
alert("Script loaded and executed.");
// here you can use anything you defined in the loaded script
});
Попробуйте https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
const el = document.querySelector('[contenteditable]')
el.addEventListener('keyup', ({target: {lastChild}}) => lastChild.scrollIntoView())
https: / /codepen.io/wintercounter/pen/pZjeLW
Contenteditable создает div
s для каждой строки. Мы просто прокручиваем до последнего ребенка из всей редактируемой области.
Здесь я внес некоторые изменения в ваш код.
Нажмите здесь, чтобы посмотреть
<div contenteditable class="editableContent">Start typing ...</div>
<div class="sticky-footer">
<button>Submit</button>
</div>
.sticky-footer {
position:sticky;
bottom:0;
padding:20px 0;
background:#eee
}
.editableContent{
min-height: 30px;
overflow: auto;
max-height: 50px;
}
Все, что вам нужно сделать, это добавить этот код в перо:
div[contenteditable]{
height:calc(100vh - 70px);
overflow-y:scroll;
}
body{
overflow:hidden;
}
Вот рабочий пример кода:
.sticky-footer {
position:sticky;
bottom:0;
padding:20px 0;
background:#eee
}
div[contenteditable]{
height:calc(100vh - 70px);
overflow-y:scroll;
}
body{
overflow:hidden;
}
<div contenteditable>Start typing ...</div>
<div class="sticky-footer">
<button>Submit</button>
</div>
Надеюсь, это было полезно.
Используя overflow: auto
, установив max-height
в редактируемый контейнер содержимого, вычислив высоту порта представления за вычетом высоты липкого нижнего колонтитула. Пожалуйста, проверьте рабочий пример ниже:
.sticky-footer {
position:sticky;
bottom:0;
padding:20px 0;
background:#eee
}
.content-editable{
min-height: 30px;
overflow: auto;
max-height: calc(100vh - 65px);
}
<div contenteditable class="content-editable">Start typing ...</div>
<div class="sticky-footer">
<button>Submit</button>
</div>
Возможно, используйте style="overflow: scroll";
в <div contenteditable>Start typing ...</div>
<div contenteditable style="overflow: scroll";>Start typing ...</div>
<div class="sticky-footer">
<button>Submit</button>
</div>