Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как с помощью скрипта высчитать ширину полосы прокрутки? (https://javascript.ru/forum/dom-window/71320-kak-s-pomoshhyu-skripta-vyschitat-shirinu-polosy-prokrutki.html)

LADYX 11.11.2017 22:00

Nexus,
прошу меня простить за вновь поднятую тему. При добавлении этого скрипта
var body_width=$('body').width(),
		$wrp=$('.wrp');
    
$wrp.css({
    width:body_width,
    'margin-left':-$wrp.offset().left
});

происходит конфликт скриптов. А именно все скрипты, которые находятся ниже его, перестают работать. Если я этот скрипт располагаю самым последним, то тогда все скрипты работают корректно. Если я заключаю его в
~function () {
}();

то это не помогает избежать конфликта.
Скажите, пожалуйста, что можно сделать?

рони 11.11.2017 22:08

LADYX,
консоль что пишет?

LADYX 11.11.2017 22:14

Цитата:

Сообщение от рони
консоль что пишет?

рони,
показывает на ошибку в строке номер такой-то, на этой строке выходит:
'margin-left':-$wrp.offset().left

да, и подчеркивает в этой строке волной
).left

рони 11.11.2017 22:19

LADYX,
скорее всего элемента $('.wrp'); ещё нет
сделайте так
$(function() {
var body_width=$('body').width(),
    $wrp=$('.wrp');

$wrp.css({
    width:body_width,
    'margin-left':-$wrp.offset().left
});

});

LADYX 11.11.2017 22:22

рони,
я уже так тоже пробовал, не помогает

рони 11.11.2017 22:32

LADYX,
делайте макет с проблемой или ждите телепата.
что будет в консоли, код ниже
$(function() {
var body_width=$('body').width(),
    $wrp=$('.wrp');
         console.log($wrp.length)
$wrp.css({
    width:body_width,
    'margin-left':-$wrp.offset().left
});

});

Nexus 11.11.2017 23:43

LADYX,
Цитата:

Сообщение от LADYX
Прошу меня простить. И этот вариант работает. Это моя ошибка. Просто у меня блок .wrp идет не класс, а ид.


LADYX 12.11.2017 12:53

Nexus,
нет, не в этом дело. Сейчас скрипт у меня вот такой:
$(function() {
  function update() {
    var body_width=$('body').width(), $uf=$('#pp-uf_range');

    $uf.css({
      width:body_width,
      'margin-left':-$uf.offset().left
    });
	console.log($uf.length)
  }

  $(window).resize(update);
  update();
});

рони,
в консоли вот что:
Uncaught TypeError: Cannot read property 'left' of undefined
    at update (scripts.js:113)
    at HTMLDocument.<anonymous> (scripts.js:119)
    at i (jquery.js?v=22:2)
    at Object.fireWith [as resolveWith] (jquery.js?v=22:2)
    at Function.ready (jquery.js?v=22:2)
    at HTMLDocument.J (jquery.js?v=22:2)

scripts.js:113 это:
'margin-left':-$uf.offset().left

подчеркивает
).left

scripts.js:119 это:
update();

Цитата:

Сообщение от рони
делайте макет с проблемой

рони,
я правильно дал информацию? Или не то что нужно? Тогда ткните меня, пожалуйста, носом)

Nexus 12.11.2017 13:01

LADYX, попробуйте так и смотрите консоль:
$(function(){
  $(window).resize(function(){
    var body_width=$('body').width(), 
	$uf=$('#pp-uf_range');
	
	if(!$uf.length)
		throw new Error('Element «#pp-uf_range» not found');

    $uf.css({
      width:body_width,
      'margin-left':-$uf.offset().left
    });
  }).resize();
});

У вас элемента нет на странице.

LADYX 12.11.2017 13:22

Nexus,
конфликт решается заменой строки
$uf.css({

на
$uf.length && $uf.css({

но тогда появляется другая проблема. Есть у меня другой скрипт
$(function() {
  $(window).scroll(function() {
    var windowScroll = $(window).scrollTop();
    var element = $('.pp-sections');
    var distanceTop = element.offset().top - ($(window).height() / 2);
    var distanceHeight = element.offset().top - ($(window).height() / 2 - element.height());
    if (windowScroll > distanceTop && windowScroll < distanceHeight)
      $('#panel-pp').animate({ 'left': '0px' }, 500);
    else
      $('#panel-pp').stop(true).animate({ 'left': '-146px' }, 200);
  });
});

И на страницах, где нет блока .pp-sections, в консоли появляется ошибка в строке
var distanceTop = element.offset().top - ($(window).height() / 2);

Если обернуть этот скрипт в
~function () {
}();

то это не помогает. Что можно сделать?
Простите меня за миллион вопросов, я сам уже запарился, ни одно, так другое :(


Часовой пояс GMT +3, время: 05:26.