Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2018, 21:03
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

Бегущая строка
Помогите, пожалуйста, немного поправить скрипт бегущей строки. Когда страница загружается, то строка уже заполнена. А мне нужно, чтобы строка начинала бежать только после того, когда произойдет полная загрузка сайта. Можно так сделать? И еще один момент: как сделать паузу при наведении на строку? Спасибо большое!
var wrapper = document.querySelector('.currency_quotation'),
    marquee = document.querySelector('#marquee'),   
    wrapperWidth = wrapper.offsetWidth,
    marqueeWidth = marquee.scrollWidth;
function move() {
  var currentTX = getComputedStyle(marquee).transform.split(',');
  if( currentTX[4] === undefined ) {
    currentTX = -1;
  } else {
    currentTX = parseFloat(currentTX[4]) - 1;
  }
  
  if(-currentTX >= marqueeWidth) {
    marquee.style.transform = 'translateX(' + wrapperWidth + 'px)';
  
  } else {
    marquee.style.transform = 'translateX(' + currentTX + 'px)';
  }
}
var interval = setInterval(move, 20);

<style>.currency_quotation {
  width: 100%;
  overflow: hidden;
  position: relative;
}

#marquee {
  white-space: nowrap;
}

#marquee p {
  display: inline;
  margin-right: 50px;
}</style>
<div class="currency_quotation">
  <div id=marquee>
    <p>Старт прошел в ночь на 8 января 2018 года с пускового комплекса SLC-40 на мысе Канаверал во Флориде..</p>
    <p>Стратегическое командование США сообщило, что не зафиксировала новый военный спутник на заданной орбите. Некоторые СМИ уже предположили, что американский спутник-шпион упал в океан. В компании Илона Маска утверждали, что, по их данным, Falcon 9 отработал в штатном режиме. Позже в SpaceX начали расследование. Уже заявлено, что «к настоящему моменту нет признаков саботажа или другого вмешательства» в процесс запуска спутника.</p>
  </div>
</div>
Ответить с цитированием
  #2 (permalink)  
Старый 18.01.2018, 03:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Бегущая строка
LADYX,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style>
.currency_quotation {
  width: 100%;
  overflow: hidden;
  position: relative;
}

#marquee {
  display:  inline-block;
  background-color: #FFD700;
  white-space: nowrap;
  transform: translateX(100%);
}

#marquee p {
  display: inline;
  margin-right: 50px;
}</style>
  <script>
window.addEventListener("load", function() {
  var wrapper = document.querySelector(".currency_quotation"),
  marquee = document.querySelector("#marquee"),
  wrapperWidth = wrapper.offsetWidth,
  marqueeWidth = marquee.scrollWidth,
  currentTX = wrapperWidth;
  wrapper.addEventListener("mouseenter", function() {
    wrapper.classList.remove("move");
  });
  wrapper.addEventListener("mouseleave", function() {
    wrapper.classList.add("move");
  });
  window.addEventListener("resize", function() {
  wrapperWidth = wrapper.offsetWidth;
  marqueeWidth = marquee.scrollWidth;
  currentTX = wrapperWidth;
})

  function move() {
    if (wrapper.classList.contains("move")) {
      currentTX--;
    }
    if (-currentTX >= marqueeWidth) {
      currentTX = wrapperWidth;
    }
    marquee.style.transform = "translateX(" + currentTX + "px)";
  }
  var interval = setInterval(move, 20);
});
  </script>
</head>

<body>

<div class="currency_quotation move">
  <div id=marquee>
    <p>Старт прошел в ночь на 8 января 2018 года с пускового комплекса SLC-40 на мысе Канаверал во Флориде..</p>
    <p>Стратегическое командование США сообщило, что не зафиксировала новый военный спутник на заданной орбите. Некоторые СМИ уже предположили, что американский спутник-шпион упал в океан. В компании Илона Маска утверждали, что, по их данным, Falcon 9 отработал в штатном режиме. Позже в SpaceX начали расследование. Уже заявлено, что «к настоящему моменту нет признаков саботажа или другого вмешательства» в процесс запуска спутника.</p>
  </div>
</div>


</body>
</html>

Последний раз редактировалось рони, 18.01.2018 в 10:54.
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2018, 10:48
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

рони,
спасибо вам, да, всё супер!
Ответить с цитированием
  #4 (permalink)  
Старый 18.01.2018, 15:10
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

рони,
прошу прощения, один момент. Делаю паузу так:
document.querySelector('.marquee_pause').onclick = function() {
  clearInterval(interval)
}

Работает. Но вот как мне сделать, чтобы при повторном нажатии бег возобновлялся. Помогите, пожалуйста, что я не так делаю?
Ответить с цитированием
  #5 (permalink)  
Старый 18.01.2018, 15:17
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Сообщение от LADYX
Но вот как мне сделать, чтобы при повторном нажатии бег возобновлялся
interval = setInterval(move, 20);
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2018, 15:42
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

document.querySelector('.marquee_pause').onclick = function() {
     if (interval) { clearInterval(interval); interval = 0;}
     else interval = setInterval(move, 20);
  }


А лучше
document.querySelector('.marquee_pause').onclick = function() {
     wrapper.classList.toggle("move");
  }

Последний раз редактировалось Dilettante_Pro, 18.01.2018 в 15:50.
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2018, 16:20
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

Добавляю так:
window.addEventListener("load", function() {
  var wrapper = document.querySelector(".currency_quotation"),
  marquee = document.querySelector("#marquee"),
  wrapperWidth = wrapper.offsetWidth,
  marqueeWidth = marquee.scrollWidth,
  currentTX = wrapperWidth;
  wrapper.addEventListener("mouseenter", function() {
    wrapper.classList.remove("move");
  });
  wrapper.addEventListener("mouseleave", function() {
    wrapper.classList.add("move");
  });
  window.addEventListener("resize", function() {
  wrapperWidth = wrapper.offsetWidth;
  marqueeWidth = marquee.scrollWidth;
  currentTX = wrapperWidth;
})

document.querySelector('.marquee_pause').onclick = function() {
     wrapper.classList.toggle("move");
  }

  function move() {
    if (wrapper.classList.contains("move")) {
      currentTX--;
    }
    if (-currentTX >= marqueeWidth) {
      currentTX = wrapperWidth;
    }
    marquee.style.transform = "translateX(" + currentTX + "px)";
  }
  var interval = setInterval(move, 20);
});

Не работает. Что я неправильно делаю?
И еще подскажите, пожалуйста, как добавить условие, что если на паузе, то классу .marquee_pause добавлять класс .marquee_pause_active ?
Простите за кучу вопросов.
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2018, 16:22
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

Dilettante_Pro,
кстати, а первый вариант работает
Ответить с цитированием
  #9 (permalink)  
Старый 18.01.2018, 16:34
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от LADYX
Не работает
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style>
.currency_quotation {
  width: 100%;
  overflow: hidden;
  position: relative;
}

#marquee {
  display:  inline-block;
  background-color: #FFD700;
  white-space: nowrap;
  transform: translateX(100%);
}

#marquee p {
  display: inline;
  margin-right: 50px;
}</style>
  <script>
window.addEventListener("load", function() {
  var wrapper = document.querySelector(".currency_quotation"),
  marquee = document.querySelector("#marquee"),
  wrapperWidth = wrapper.offsetWidth,
  marqueeWidth = marquee.scrollWidth,
  currentTX = wrapperWidth;
  wrapper.addEventListener("mouseenter", function() {
    wrapper.classList.remove("move");
  });
  wrapper.addEventListener("mouseleave", function() {
    wrapper.classList.add("move");
  });
  window.addEventListener("resize", function() {
  wrapperWidth = wrapper.offsetWidth;
  marqueeWidth = marquee.scrollWidth;
  currentTX = wrapperWidth;
})
  document.querySelector('.marquee_pause').onclick = function() {
     wrapper.classList.toggle("move");
  }
  function move() {
    if (wrapper.classList.contains("move")) {
      currentTX--;
    }
    if (-currentTX >= marqueeWidth) {
      currentTX = wrapperWidth;
    }
    marquee.style.transform = "translateX(" + currentTX + "px)";
  }
  var interval = setInterval(move, 20);
});
  </script>
</head>

<body>

<div class="currency_quotation move">
  <div id=marquee>
    <p>Старт прошел в ночь на 8 января 2018 года с пускового комплекса SLC-40 на мысе Канаверал во Флориде..</p>
    <p>Стратегическое командование США сообщило, что не зафиксировала новый военный спутник на заданной орбите. Некоторые СМИ уже предположили, что американский спутник-шпион упал в океан. В компании Илона Маска утверждали, что, по их данным, Falcon 9 отработал в штатном режиме. Позже в SpaceX начали расследование. Уже заявлено, что «к настоящему моменту нет признаков саботажа или другого вмешательства» в процесс запуска спутника.</p>
  </div>
</div>
<button class="marquee_pause">Pause</button>

</body>
</html>

Последний раз редактировалось Dilettante_Pro, 18.01.2018 в 16:36.
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2018, 16:43
Аватар для LADYX
Профессор
Отправить личное сообщение для LADYX Посмотреть профиль Найти все сообщения от LADYX
 
Регистрация: 19.02.2015
Сообщений: 217

Dilettante_Pro,
да, увидел ошибку.
А если первый ваш вариант добавляю:
document.querySelector('.marquee_pause').onclick = function() {
     if (interval) { clearInterval(interval); interval = 0; this.toggleClass('marquee_pause_active'); }
     else interval = setInterval(move, 20);
  }

.marquee_pause_active {}

то также исправно работает. Но вот классу .marquee_pause класс .marquee_pause_active почему не добавляется, где снова моя ошибка?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
бегущая строка на jquery gazman jQuery 3 15.02.2017 14:20
Бегущая строка динамическое обновление nikolaygrand Общие вопросы Javascript 4 01.02.2013 08:51
бегущая строка на Jquery noosfera jQuery 10 19.11.2012 17:10
Предполагается наличие ';' в IE7- FINoM (X)HTML/CSS 5 25.08.2012 16:05
Необходима бегущая строка: непрерывная, снизу вверх Garaeva_Gulnara Элементы интерфейса 3 30.10.2009 18:25