Окно прокрутки в текущую строку контентного блока

В 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
});
3
задан MaxCore 13 July 2018 в 12:24
поделиться

5 ответов

Попробуйте 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 для каждой строки. Мы просто прокручиваем до последнего ребенка из всей редактируемой области.

3
ответ дан wintercounter 17 August 2018 в 12:53
поделиться

Здесь я внес некоторые изменения в ваш код.

Нажмите здесь, чтобы посмотреть

<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;
  }
4
ответ дан A.Sakkeer 17 August 2018 в 12:53
поделиться

Все, что вам нужно сделать, это добавить этот код в перо:

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> 

Надеюсь, это было полезно.

2
ответ дан Code_Ninja 17 August 2018 в 12:53
поделиться

Используя 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>

2
ответ дан Girish 17 August 2018 в 12:53
поделиться

Возможно, используйте style="overflow: scroll"; в <div contenteditable>Start typing ...</div>

<div contenteditable style="overflow: scroll";>Start typing ...</div>

<div class="sticky-footer">
  <button>Submit</button>
</div>
4
ответ дан Mateusz Byczkowski 17 August 2018 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: