#css
#css
Вопрос:
У меня есть изображение карты, и я хочу увеличивать / уменьшать масштаб при нажатии на него. Этот приведенный ниже код увеличивает его, но я хочу увеличить изображение по центру вокруг местоположения курсора и отобразить горизонтальную прокрутку. Как я могу сделать это только с помощью CSS?
CSS
input[type=checkbox]{
display: none;
}
.container img{
transition: transform 0.25s ease;
cursor: zoom-in;
}
input[type=checkbox]:checked ~ label > img{
-webkit-transform: scale(2);
transform: scale(2);
cursor: zoom-out;
}
HTML
<div class="container"><input id="zoomCheck" type="checkbox" />
<label for="zoomCheck">
<img src="map.jpg" />
</label></div>
Комментарии:
1. Вы можете сделать это с помощью javascript. : D
2. CSS не реагирует на события нажатия на изображение. Используйте JS. Вычислите местоположение щелчка мыши, а затем увеличьте карту и переместите ее так, чтобы координаты щелчка соответствовали центру увеличенного изображения
Ответ №1:
Я создал для вас логику, которую вы можете использовать. Просто добавьте другие функции.
В принципе, это то, что вы хотите.
Скрипка: https://jsfiddle.net/zpobnetf/11 /
Как вы можете этого добиться?
-
Получить положение щелчка (clientX, clienY)
-
Клонируйте изображение в div с фоновым изображением (src изображения щелкнул)
-
Расположите их в зависимости от позиции, на которую был нажат.
Как вы можете видеть на моем примере. Я вычитаю clientX и clientY на 75. Это потому, что поле, которое я создал, имеет размер 150×150. Я просто делю его на 2. Таким образом, я могу расположить поле # в центре.
Надеюсь, вы поняли. Ура! Вы можете это сделать. Просто верьте!
let mapa = document.getElementById('map'),
box = document.getElementById('box');
mapa.addEventListener('click', (e) => {
let xPos = (e.clientX - 75),
yPos = (e.clientY - 75);
box.style.display = 'initial';
box.style.top = `${yPos}px`;
box.style.left = `${xPos}px`;
box.style.backgroundPosition = `-${xPos}px -${yPos}px`;
});
#box {
height: 150px;
width: 150px;
background: rgba(255,255,255,0.8);
background-image: url('https://www.gstatic.com/images/branding/googlelogo/2x/googlelogo_color_284x96dp.png');
background-repeat: no-repeat;
transform: scale(1.4);
position: absolute;
display: none;
}
<img id="map" src="https://www.gstatic.com/images/branding/googlelogo/2x/googlelogo_color_284x96dp.png">
<div id="box"></div>
Комментарии:
1. Спасибо за ваш ответ, но я ищу решение с использованием чистого CSS. Разве нет способа обойти это?
2. О, я понимаю. Прямо сейчас нет решения для css. Для создания такого эффекта вам нужен javascript. Потому что в css нет триггера для события щелчка мыши. Таким образом, css не может получить положение изображения, на которое был нажат. Кстати, извините, что ответил на него с помощью javascript. Я не видел заметки, которую вы разместили сверху.