Pracuję nad stroną internetową, która osadza inną stronę z innej domeny wewnątrz elementu iframe. Zawartość tej strony dokładnie pasuje do elementu iframe, więc nie ma przepełnionej zawartości ani pasków przewijania. Jednak zawartość można powiększać za pomocą kółka myszy.Zatrzymaj przewijanie na powiększonym elemencie iframe
Jednak w Safari i Chrome powiększanie za pomocą kółka myszy powoduje również przewinięcie całej strony. Nie chcę, aby to było przewijanie - tylko powiększanie elementu iframe. Jak zatrzymać przewijanie, gdy wskaźnik myszy znajduje się nad ramką iframe?
Podjęto próbę odtworzenia problemu w minimalnym przykładzie na JSFiddle: https://jsfiddle.net/twodee/57a68k3h. Po powiększeniu zielonego elementu iframe tekst jest powiększany, ale strona również się przewija.
frame = document.getElementById('myframe');
frame_child = document.createElement('div');
var font_size = 12;
frame_child.addEventListener('wheel', function(e) {
font_size += e.wheelDelta;
frame_child.style.fontSize = font_size + 'px';
});
frame_child.style.width = '190px';
frame_child.style.height = '190px';
frame_child.innerHTML = 'this text should zoom';
frame.contentWindow.document.body.appendChild(frame_child);
#myframe {
background-color: #00FF00;
}
<ul>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
<li>a</li>
</ul>
<div>
<iframe id="myframe" height="200px" width="800px" src="about:blank"></iframe>
</div>
<ul>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
<li>b</li>
</ul>
EDIT: Powyższy przykład jest trochę mylące, że źródło iframe naprawdę nie jest generowany dynamicznie przez własnego scenariusza. Zamiast tego źródło jest generowane przez osobną stronę internetową, która oczekuje wprowadzenia formularza od requestera. Oto CodePen, który lepiej pokazuje mój problem: http://codepen.io/twodee/pen/PGqgyw. (JSFiddle zezwala tylko na źródła https: //.)
Po przejściu przez element iframe kostka 3D zostanie powiększona, a strona przewinięta.
EDYCJA: Efekt, którego szukam, jest tym, co widzę, gdy Mapy Google są osadzone na stronie. Lub Sketchfab. Kiedy umieszczam je w elemencie iframe, nie muszę robić nic specjalnego na stronie, która wykonuje osadzanie, aby powiększanie odbywało się bez przewijania. Wydaje się, że coś w samej treści osadzonej wyłącza przewijanie, ale nie wiem co.
StackOverflow Run fragment kodu nie działa z powodu polityki cross-pochodzenia. JSFiddle działa. – kaerimasu