#javascript #html #jquery #css
#javascript #HTML #jquery #css
Вопрос:
В настоящее время я изучаю javascript и столкнулся с проблемой, из-за которой я застрял:
у меня есть a div
с a 90% height
и a 80% width
.
Я пытаюсь увеличить это div
значение при прокрутке до полного размера экрана (должно занимать весь дисплей) ( 100% width
, 100% height
).
Я пробовал циклы for и do-while, но, похоже, это не работает.
Кажется, что height
и width
div
не изменяют стиль элемента.
Кто-нибудь знает, как это исправить?
Я действительно с нетерпением жду любых советов, которые вы можете мне дать, чтобы реализовать мой проект и учиться на своих ошибках.
Ниже приведен мой текущий код :
$(document).ready(function(){
$(window).scroll(function(e){
var pos = $(window).scrollTop();
console.log("Scroll:" pos);
var div = document.getElementsByClassName('home');
if(pos>300){
let h = 90 (pos/150);
let w = 80 1 (pos/50);
if(h>100){
h = 100;
}
if(w>100){
w = 100;
}
h = " " " h " %"";
w = " " " w " %"";
console.log(h);
document.getElementsByClassName('home').height = Math.round(h);
document.getElementsByClassName('home').width = Math.round(w);
}
});
});
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
background-color: #CBCACA;
}
.wrapper{
height: 100%;
width: 100%;
position: relative;
}
.home{
height: 90%;
width: 80%;
position: fixed;
top: 5%;
left: 10%;
border-radius: 50px;
background-color: #302D2D;
}
.supply{
height: 100vh;
width: 70%;
position: relative;
left: 15%;
margin-top: 100%;
background-color: crimson;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Timo Roedler</title>
<meta name="description" content="small test with Scrolling">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="wrapper">
<div class="headline">
</div>
<div class="main">
<div class="home">
</div>
<div class="supply">
<div class="supply1">
</div>
<div class="supply2">
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="app.js"></script>
</body>
</html>
Комментарии:
1. Возможно, вы захотите рассмотреть возможность использования
transform: scale(x)
вместо width / height для увеличения объектов. Они будут расширяться от центра.
Ответ №1:
Очень хорошая попытка. У вас просто есть несколько неправильных вещей.
Нацеливание на элемент
Прямо сейчас у вас есть следующий код.
var div = document.getElementsByClassName('home');
В этом вы пытаетесь настроить таргетинг на свой «домашний» элемент, и синтаксис правильный, но он не вернет узел. .getElementsByClassName()
возвращает объект, подобный массиву, что означает, что вам нужно будет получить к нему доступ с помощью document.getElementsByClassName('home')[0]
или div[0]
. Лично я предпочитаю использовать document.querySelector()
, но вы также можете использовать jQuery для получения нужного элемента.
Применение стиля
Вот ваш код:
h = " " " h " %"";
document.getElementsByClassName('home').height = Math.round(h)
Во-первых, природа строк в JavaScript позволяет вам просто использовать h = h '%'
. Кроме того, если вам нужно включить кавычки в строку (вы этого не делаете, но это может быть полезно знать), вы можете заключить их в одинарные кавычки: var message = 'the "name" field is required.'
как только у вас есть строка, вы больше не можете использовать Math.round()
ее. Math.round()
принимает только число. В этом случае, однако, нет необходимости округлять. Вы можете использовать неокругленное значение, но вы не должны применять его к .height
. Это свойство устарело, и его предпочтительнее присвоить свойству стиля CSS, которое .style.height
.
Центрирование вашего элемента
В вашем коде вы пытаетесь сместить элемент, используя 5% и 10% сверху и слева соответственно. Вам также придется изменять их при изменении высоты, или вы можете использовать преобразования для центрирования вашего элемента следующим образом:
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
В целом, хороших усилий и удачи в ваших усилиях по изучению JavaScript. Это очень интересный язык для изучения. Ниже я включил фрагмент кода с этими изменениями. Надеюсь, это поможет продемонстрировать приведенную выше информацию.
$(document).ready(function(){
$(window).scroll(function(e){
var pos = $(window).scrollTop();
//console.log("Scroll:" pos);
var div = document.querySelector('.home');
if(pos>300){
let h = 90 (pos/150);
let w = 80 1 (pos/50);
if(h>100){
h = 100;
}
if(w>100){
w = 100;
}
h = h "%";
w = w "%";
//console.log(h);
document.querySelector('.home').style.height = h;
document.querySelector('.home').style.width = w;
}
});
});
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
background-color: #CBCACA;
}
.wrapper{
height: 100%;
width: 100%;
position: relative;
}
.home{
height: 90%;
width: 80%;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 50px;
background-color: #302D2D;
}
.supply{
height: 100vh;
width: 70%;
position: relative;
left: 15%;
margin-top: 100%;
background-color: crimson;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Timo Roedler</title>
<meta name="description" content="small test with Scrolling">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="wrapper">
<div class="headline">
</div>
<div class="main">
<div class="home">
</div>
<div class="supply">
<div class="supply1">
</div>
<div class="supply2">
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="app.js"></script>
</body>
</html>
Комментарии:
1. О, вау, большое тебе спасибо. Объяснение лучше и подробнее, чем я ожидал. Не могу отблагодарить вас! Я действительно в отчаянии последние два дня, и без вашего halp, вероятно, и в следующие дни тоже.
Ответ №2:
При беглом взгляде это может иметь какое-то отношение к этим строкам
// You were trying to use Math.round on a string.
h = Math.round(h) "%";
w = Math.round(w) "%";
console.log(h);
// assign the percentage directly to the style
document.getElementsByClassName('home').style.height = h;
document.getElementsByClassName('home').style.width = w;