Запретить прокрутку при включенном видеобоксе - PullRequest
3 голосов
/ 25 июня 2010

Я использую видеобокс для встраивания потоков в мой сайт, и я только что обнаружил, что когда видеобокс "включен" - т.е. я нажал на ссылку, которая вызывает его и затемняет все вокруг него - я все еще могу прокрутить вниз и увидеть остальная часть моего (не затемненного) сайта. Это нарушает погружение, и я хотел бы отключить прокрутку, но только для включенного видеобокса.

Я понятия не имею, с чего начать.

Ответы [ 3 ]

1 голос
/ 26 июня 2010

Насколько я знаю, вы не можете сделать это только с помощью JavaScript, поскольку onscroll событие не может быть отменено .

Этого можно добиться, расположив все вконтейнер div с height и width из 100% и отключением переполнения для элементов html и body, так что вы фактически получаете полосы прокрутки для контейнера div.Когда ваш видеобокс включен, вы можете включить наложение, которое скрывает все, что за ним (включая полосы прокрутки на контейнере), и отобразить видеобокс поверх него.

<!DOCTYPE html>
<html>
 <head>
  <meta charset=utf-8>
  <title>Prevent scrolling</title>
  <style>
    * { padding: 0; margin: 0; border: 0 }

    html, body {
      height: 100%;
      overflow: hidden;
    }

    #container {
      position: absolute;
      height: 100%;
      width: 100%;
      overflow: auto;
    }

    #large-div {
      background: #aaa;
      height: 5000px;
      width: 5000px;
    }

    #overlay {
      position: absolute;
      background: #fff;
      opacity: 0.7;
      -moz-opacity: 0.7;
      -webkit-opacity: 0.7;
      -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
      filter: alpha(opacity=70);
      height: 100%;
      width: 100%;
      z-index: 1000;
      display: none;
    }

    #videobox-container {
      position: absolute;
      background: #dd8;
      width: 600px;
      height: 400px;
      top: 50%;
      left: 50%;
      margin: -300px 0 0 -200px;
      z-index: 1001;
      display: none;
    }
  </style>
 </head>
 <body>
  <div id="container">
   <div id="large-div"></div>
  </div>
  <div id="overlay"></div>
  <div id="videobox-container"></div>
  <script>
    function showVideoBox() {
      // show both overlay and videobox-container
      document.getElementById("overlay").style.display = "block";
      document.getElementById("videobox-container").style.display = "block";
    }

    showVideoBox();
  </script>
 </body>
</html>

(Вам придется возитьсянемного с позициями ваших элементов, но вы поняли.)

0 голосов
/ 23 апреля 2013

в videobox.js

замените строку 80

    this.overlay.setStyles({'top': window.getScrollTop()+'px', 'height': window.getHeight()+'px'});

следующим:

this.overlay.setStyles({top:-$(window).getScroll().y,height:$(window).getScrollSize().y+$(window).getScroll().y});

По сути, это высота свитка 'y' и довольночем то, что показывает экран.

0 голосов
/ 05 июля 2010

Простое решение - добавить css body{overflow:hidden;}, когда видео начнет воспроизводиться, и после этого удалить его. Кроме того, вы не можете поместить видео окно в тег div и установить его положение фиксированным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...