Я работаю над разделом наложения изображений на своем веб-сайте. В элементах находятся три изображения, которые складываются и открываются по одному за счет изменения размера элементов по горизонтали с использованием положения полосы прокрутки. Он отлично работает в Safari, но не в Chrome / Firefox.
Я пропустил код через валидатор w3c и исправил все проблемы, но у меня все еще та же проблема ... работает в сафари, но не в Chrome / Firefox.
Я был бы очень признателен, если бы кто-нибудь мог взглянуть на приведенный ниже код.
Заранее спасибо,
Крис
var xyz;
var slide1Width = $("#slide1").width();
var slide2Width = $("#slide2").width();
var slide3Width = $("#slide3").width();
var counter = 0;
$(document).ready(function(e) {
/////////Slide scroll-resize activation/////////
$(window).scroll(function(e) {
var slide1Height = $("#slide1").height();
xyz = $("body").scrollTop();
$("#inputs").text(xyz);
//When slide1 scroll-resize is enabled
if (xyz <= slide1Width && xyz >= 50) {
$("#slide2").css({
"width": xyz
});
};
//When slide2 scroll-resize is enabled
if (xyz >= slide1Width * 2 + 25 && xyz <= slide1Width * 3) {
$("#slide3").css({
"width": xyz - slide1Width * 2
});
};
var video = document.getElementById("video");
video.currentTime = (xyz - slide1Width) / 55;
if (xyz >= slide1Width && xyz < slide1Width * 2) {
$("#video").css({
"visibility": "visible"
});
} else {
$("#video").css({
"visibility": "hidden"
});
};
$("#video").height($("#slide1").height());
/*$("#video").width($("#slide1").width());*/
});
});
window.onload = function(e) {
var x = $("#slide1").width();
var y = $("#slide1").innerHeight();
$("#slide2").resizable({
containment: "parent",
minWidth: 50,
stop: function(event, ui) {
$("body").scrollTop($(this).width());
}
});
$("#slide2").css({
"height": y,
"width": 50
});
$("#slide3").resizable({
containment: "parent",
minWidth: 25,
stop: function(event, ui) {
$("body").scrollTop($(this).width() + x);
}
});
$("#slide3").css({
"height": y,
"width": 25
});
///////////Slide 3 click behaviour////////////
//Single click//
$("#slide3").click(function(e) {
$("body").scrollTop($("#slide1").width() * 2 + $(this).width());
});
//Double click//
$("#slide3").dblclick(function(e) {
$("body").scrollTop($("#slide2").width());
});
///////////Slide 2 click behaviour////////////
//Single click//
$("#slide2").click(function(e) {
$("body").scrollTop($(this).width());
});
};
$(window).resize(function() {
var x = $("#slide1").width();
var y = $("#slide1").innerHeight();
var z = $("#slide2").width();
var slide3width = $("#slide3").width();
var result = z / x;
var b = result * 100;
var c = b.toString() + "%";
var result3 = slide3width / x;
var slide3percentInt = result3 * 100;
var slide3percentString = slide3percentInt.toString() + "%";
$("#slide2").css({
"height": y,
"width": c
});
$("#slide2").resizable({
minWidth: 50,
containment: "parent"
});
$("#slide3").css({
"height": y,
"width": slide3percentString
});
$("#slide3").resizable({
minWidth: 25,
containment: "parent"
});
});body {
background-color: black;
height: 5000px;
}
#box1 {
width: 100%;
height: 100px;
background-color: black;
}
#wrapper {
position: fixed;
width: 80%;
height: auto;
margin: auto;
left: 10%;
}
img {
width: 100%;
height: auto;
z-index: 1;
}
#slide1 {
position: absolute;
float: left;
width: 100%;
height: auto;
padding: 0;
margin: 0;
border: none;
z-index: 1;
}
#slide2 {
position: absolute;
float: left;
padding: 0;
margin: 0;
border: none;
background-image: url("WESetBW.svg");
background-repeat: no-repeat;
background-size: cover;
z-index: 2;
}
#slide3 {
position: absolute;
padding: 0;
margin: 0;
border: none;
background-image: url("WESetViz.svg");
background-repeat: no-repeat;
background-size: cover;
z-index: 4;
}
#video {
position: relative;
float: left;
margin: 0;
border: none;
z-index: 3;
visibility: hidden;
width: 100%;
object-fit: cover;
}
#inputs {
height: 20px;
width: 100px;
background-color: white;
color: red;
position: fixed;
}<!doctype html>
<html>
<head>
<meta charset = "UTF-8">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel = "stylesheet" href = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css" />
<script src = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<title>Untitled Document</title>
</head>
<body>
<div id = "wrapper">
<div id = "box1">
</div>
<div id = "slide1">
<img src = "WESet-photo.svg" alt = "World's End set" />
</div>
<div id = "slide2">
</div>
<div id = "slide3">
</div>
<video id = "video">
<source src = "WEsetOriginalVideo.mp4" type = "video/mp4">
Your browser does not support the video tag.
</video>
</div>
<div id = "inputs">
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
</body>
</html>Ваш HTML не содержит ничего, что закон, кроме некоторых JavaScript и CSS включает и элемент заголовка, как можно ожидать ответа на ваш вопрос, основываясь только на этом?
Измените фрагмент, чтобы воспроизвести вашу проблему. Вы можете использовать фиктивные изображения из dummyimage.com, чтобы имитировать изображения, если вы не хотите показывать свои.
На первый взгляд, у вас должен быть slide1width и весь этот код, включенный в вашу функцию document.ready. В нынешнем виде эти строки могут выполняться до того, как эти элементы будут загружены, и поэтому значения ширины будут неправильными.
Спасибо, jmcgriz. Я наконец нашел ответ, хотя много поисковиков. В конце концов, вызов scrollTop для «документа» работал во всех браузерах, а не для его «тела», который работал только в Safari:



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы получите лучший ответ, если создадите правильную демонстрацию. Используйте инструмент сниппета в редакторе или настройте его, например, на jsfiddle.net.