#html #css
Вопрос:
Я создал доступный для содержимого раздел, в котором есть панель инструментов с липким меню (прикрепляется в верхней части браузера, если прокрутка достигает верхней части страницы) и область содержимого с текстом и изображением. При щелчке по изображению открывается всплывающая панель инструментов, позволяющая манипулировать изображениями.
Всплывающая панель инструментов должна появиться рядом с указателем курсора, hower:
- С конфигурацией CSS sticky это НЕ работает — она смещена более чем на 100 пикселей как в X, так и в Y и получает большее/меньшее смещение при разных коэффициентах масштабирования страницы.
- Когда я удаляю липкую конфигурацию (позиция:липкая, вверху:0), она работает и появляется прямо под указателем курсора
Почему это происходит? Как я могу сохранить панель инструментов липкого меню и заставить ее работать по назначению?
Код ниже:
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<style>
/* EDITOR */
.qr_editor {
max-width: 100%;
box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.3);
margin: 2rem;
}
/* TOOLBAR */
.qr_editor .toolbar {
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
background-color: white;
z-index:10;
/*when this sticky part is removed, the pop-up toolbar pops up in the right place*/
position: sticky;
top: 0;
}
</style>
<div id="position"></div>
<br>
<div class="container">
<div class="qr_editor">
<div class="toolbar sticky">
<div class="line">
<span class="box">
<span>Example Sticky Tool Bar Goes Here</span>
</span>
<div class="box" id="popup_toolbar" style="display:none;background-color:white;border:solid black;">
Sample Image Tools Popup Box
</div>
</div>
</div>
<div class="content-area">
<div contenteditable="true">
<div>Sample Text</div>
<img class="qr_editor_img" src="http://www.google.com.br/images/srpr/logo3w.png" style="width:100%;cursor:pointer">
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
//to display coordinates
$( document ).on( "mousemove", function( event ) {
$( "#position" ).text( "pageX: " event.pageX ", pageY: " event.pageY );
});
//pops up toolbar for image manipulation
var img_src = '';
$(document).on("click", "img", function(e) {
console.log(e.pageX);
console.log(e.pageY);
//position the popup toolbar where the mouse click is
e.preventDefault();
$('#popup_toolbar').css( 'position', 'absolute' );
$('#popup_toolbar').css( 'top', e.pageY );
$('#popup_toolbar').css( 'left', e.pageX );
$('#popup_toolbar').show();
});
});
</script>
</body>
Комментарии:
1. Я думаю, что вам не хватает «Элемента с положением: абсолютным; расположен относительно ближайшего расположенного предка (вместо расположения относительно окна просмотра, как фиксированный)». так что это относительно родителя. Вы хотите изменить $(‘#popup_toolbar’).css («позиция», «абсолютная»); на $(‘#popup_toolbar’).css( «позиция», «исправлено»);
2. попробовал, и это работает ^
3. Да, это сработало!!!! Большое спасибо!
4. Последующая проблема — если я добавлю текст над изображением, чтобы он был достаточно длинным для прокрутки, а затем щелкните изображение, панель инструментов правильно отобразится при наведении курсора. Прокрутите страницу, нажмите еще раз, панель инструментов теперь смещена НЕ по курсору… есть какие-нибудь предложения?
Ответ №1:
попробуйте это:
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<style>
/* EDITOR */
.qr_editor {
max-width: 100%;
box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.3);
margin: 2rem;
}
/* TOOLBAR */
.qr_editor .toolbar {
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2);
background-color: white;
z-index:10;
/*when this sticky part is removed, the pop-up toolbar pops up in the right place*/
position: sticky;
top: 0;
}
#popup_toolbar {
position: fixed;
}
</style>
<div id="position"></div>
<br>
<div class="container">
<div class="qr_editor">
<div class="toolbar sticky">
<div class="line">
<span class="box">
<span>Example Sticky Tool Bar Goes Here</span>
</span>
<div class="box" id="popup_toolbar" style="display:none;background-color:white;border:solid black;">
Sample Image Tools Popup Box
</div>
</div>
</div>
<div class="content-area">
<div contenteditable="true">
<div>Sample Text</div>
<img class="qr_editor_img" src="http://www.google.com.br/images/srpr/logo3w.png" style="width:100%;cursor:pointer">
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
//to display coordinates
$( document ).on( "mousemove", function( event ) {
$( "#position" ).text( "pageX: " event.pageX ", pageY: " event.pageY );
});
//pops up toolbar for image manipulation
var img_src = '';
$(document).on("click", "img", function(e) {
console.log(e.pageX);
console.log(e.pageY);
//position the popup toolbar where the mouse click is
e.preventDefault();
$('#popup_toolbar').css( 'top', e.pageY );
$('#popup_toolbar').css( 'left', e.pageX );
$('#popup_toolbar').show();
});
});
</script>
</body>