html – 停止在可缩放的iframe上滚动

前端之家收集整理的这篇文章主要介绍了html – 停止在可缩放的iframe上滚动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个网页上嵌入另一个不同域名的iframe页面.该页面内容完全符合iframe,因此没有任何溢出的内容,也没有滚动条.但是,可以使用鼠标滚轮缩放内容.

但是在Safari和Chrome中,使用鼠标滚轮缩放也会滚动整个页面.我不希望这个滚动发生 – 只有缩放的iframe.当鼠标在iframe上方时,如何停止滚动?

我尝试在JSFiddle:https://jsfiddle.net/twodee/57a68k3h中的最小示例中重新创建问题.当我缩放绿色的iframe时,文本缩放,但页面也会滚动.

  1. frame = document.getElementById('myframe');
  2. frame_child = document.createElement('div');
  3.  
  4. var font_size = 12;
  5. frame_child.addEventListener('wheel',function(e) {
  6. font_size += e.wheelDelta;
  7. frame_child.style.fontSize = font_size + 'px';
  8. });
  9.  
  10. frame_child.style.width = '190px';
  11. frame_child.style.height = '190px';
  12. frame_child.innerHTML = 'this text should zoom';
  13. frame.contentWindow.document.body.appendChild(frame_child);
  1. #myframe {
  2. background-color: #00FF00;
  3. }
  1. <ul>
  2. <li>a</li>
  3. <li>a</li>
  4. <li>a</li>
  5. <li>a</li>
  6. <li>a</li>
  7. <li>a</li>
  8. <li>a</li>
  9. <li>a</li>
  10. <li>a</li>
  11. <li>a</li>
  12. <li>a</li>
  13. <li>a</li>
  14. <li>a</li>
  15. <li>a</li>
  16. <li>a</li>
  17. <li>a</li>
  18. <li>a</li>
  19. <li>a</li>
  20. <li>a</li>
  21. <li>a</li>
  22. <li>a</li>
  23. <li>a</li>
  24. <li>a</li>
  25. <li>a</li>
  26. <li>a</li>
  27. <li>a</li>
  28. <li>a</li>
  29. </ul>
  30. <div>
  31. <iframe id="myframe" height="200px" width="800px" src="about:blank"></iframe>
  32. </div>
  33. <ul>
  34. <li>b</li>
  35. <li>b</li>
  36. <li>b</li>
  37. <li>b</li>
  38. <li>b</li>
  39. <li>b</li>
  40. <li>b</li>
  41. <li>b</li>
  42. <li>b</li>
  43. <li>b</li>
  44. <li>b</li>
  45. <li>b</li>
  46. <li>b</li>
  47. </ul>

编辑:
上面的例子有点误导,因为iframe源不是由我自己的脚本动态地生成的.相反,源由单独的网站生成,该网站期望来自请求者的表单输入.这是一个更好地演示我的问题的CodePen:http://codepen.io/twodee/pen/PGqgyw.(JSFiddle只允许https:// sources.)

当我滚动iframe时,3D立方体缩放,页面滚动.

编辑:
我之后的效果是Google地图嵌入页面时所看到的.或Sketchfab.当我将这些嵌入到iframe中时,我不必在页面中做任何特殊的处理,即使没有滚动也可以进行缩放.似乎有一些嵌入式内容本身禁用滚动,但我不知道什么.

解决方法

正如其他人所说,preventDefault()适用于您的第一个例子,它是一个div.

但是,iframe到外部站点似乎不可能,因为只有某些事件被捕获在iframe上.
在这个codepen上,您可以看到鼠标指针事件被捕获在iframe上,但是点击和轮子并不是这样.
请注意console.log(target)语句和哪些工作,哪些不工作.

Codepen

  1. <iframe id="myframe" src="http://www.w3schools.com">
  2. </iframe>
  3. <br>
  4. <div id="div1">
  5. test
  6. </div>
  7. <div id="div2">
  8. </div>

CSS

  1. iframe {
  2. width:600px;
  3. height:200px;
  4. border: 10px solid red;
  5. }
  6. div {
  7. width:600px;
  8. height:40px;
  9. border: 10px solid blue;
  10. }
  11. #div2 {
  12. width:600px;
  13. height:800px;
  14. border: 10px solid green;
  15. }

JS

  1. frame = document.getElementById('myframe');
  2. div = document.getElementById('div1');
  3.  
  4. frame.addEventListener('mouseenter',function(e) {
  5. console.log('entered');
  6. var target = e.target;
  7. console.log(target);
  8. });
  9. frame.addEventListener('click',function(e) {
  10. console.log('clicked');
  11. var target = e.target;
  12. console.log(target);
  13. });
  14. frame.addEventListener('wheel',function(e) {
  15. console.log('wheel');
  16. var target = e.target;
  17. console.log(target);
  18. });
  19.  
  20. font_size = 12;
  21. div1.addEventListener('wheel',function(e) {
  22. var target = e.target;
  23. console.log(target);
  24. font_size += -e.wheelDelta/100;
  25. this.style.fontSize = font_size + 'px';
  26.  
  27. if(target.id === 'div1')
  28. e.preventDefault();
  29. });

更新:
由于您认为可以控制iframe内容,因此可以将轮事件处理程序添加到框架内容中.尝试这个…

框架内容上的HTML

  1. <div id="framedDiv">
  2. abc<br>
  3. def<br>
  4. ghi<br>
  5. jkl<br>
  6. mno<br>
  7. pqr<br>
  8. stu<br>
  9. vwx<br>
  10. abc<br>
  11. def<br>
  12. ghi<br>
  13. jkl<br>
  14. mno<br>
  15. pqr<br>
  16. stu<br>
  17. vwx<br>
  18. abc<br>
  19. def<br>
  20. ghi<br>
  21. jkl<br>
  22. mno<br>
  23. pqr<br>
  24. stu<br>
  25. vwx<br>
  26. </div>

JS上的框架内容

  1. framed = document.getElementById('framedDiv');
  2. font_size = 12;
  3.  
  4. framed.addEventListener('wheel',function(e) {
  5. var target = e.target.id;
  6. console.log(target);
  7. font_size += -e.wheelDelta/100;
  8. this.style.fontSize = font_size + 'px';
  9. e.preventDefault();
  10. });

猜你在找的HTML相关文章