#javascript #jquery #css
Вопрос:
Я прошу совета. На странице, над которой я работаю, есть несколько «Div», в которых есть «текстовые поля» и «фоновые изображения».
Я хочу указать высоту каждого текстового поля на странице. Высота поля варьируется в зависимости от объема текста. Каждое значение высоты текстового поля используется в качестве значения поля для «фоновых изображений».
но, похоже, что текущий код вводит код только одного конкретного текстового поля.
http://client.1-2-3-4-5.studio/ppeaches/
var myHeight = $(".text-box").innerHeight() 'px';
$(".bg").attr("style", 'margin-top: -' myHeight ";");
console.log(myHeight);
* {
margin: 0;
padding: 0
}
.demo {
background-color: blue;
width: 100vw;
height: 100vh;
position: relative;
}
.demo.box-one {
background: grey;
}
.demo.box-two {
background: beige;
}
.demo.box-three {
background: blue;
}
.demo.box-four {
background: pink;
}
.demo.box-five {
background: orange;
}
.demo.box-six {
background: green;
}
.offset {
height: 500px;
}
.green {
background-color: green;
}
.black {
background-color: black;
}
.orange {
background-color: orange;
}
.top {
background-color: red;
position: relative;
}
.top .text-box {
position: fixed;
top: 0;
left: 3vw;
font-size: 10vw;
}
.bg {
width: 100%;
height: 100%;
position: sticky;
z-index: 99;
display: block;
margin-top: var(--height);
background-position: center center;
background-size: cover;
}
img {
height: 100%;
width: 100%;
}
.text-box {
position: sticky;
top: 0;
left: 3vw;
font-size: 10vw;
line-height: 11vw;
margin-bottom: -2vw;
z-index: 9999999;
width: auto;
height: auto;
display: block;
}
.stick {
position:fixed;
top:0px;
}
<div class="boxset">
<div class="demo" touching="top">
<span class="text-box">Danh Vo
Selected Bibliograph
2007 – 2015</span>
<span class="bg"><img src="http://archiv11.org/WordPress/wp-content/uploads/2015/08/00-DANH-VO-Biblio-IMG_2109-w1200.jpg"></span>
</div>
<div class="demo box-one" touching="top">
<span class="text-box">Installation view of Danh Vo
Uuntitled at the South London Gallery, 2019.</span>
<span class="bg"><img src="https://artmap.com/static/media/0000129000/0000128091.jpg"></span>
</div>
<div class="demo box-two" touching="top">
<span class="text-box">Blauorange 2007</span>
<span class="bg"></span>
</div>
<div class="demo box-three" touching="top">
<span class="text-box">Danh Vo
Selected Bibliograph
2007 – 2015</span>
<span class="bg"></span>
</div>
<div class="demo box-four" touching="top">
<span class="text-box">Félix González-Torres
"Untitled" (Portrait of Julie Ault)</span>
<span class="bg>
</div>
<div class="demo box-five" touching="top"></div>
<div class="demo box-six" touching="top"></div>
<div class="demo box-seven" touching="top"></div>
<div class="demo" touching="top"></div>
<div class="demo" touching="green"></div>
<div class="demo" touching="black"></div>
<div class="demo" touching="orange"></div>
<div class="demo" touching="top"></div>
<div class="demo" touching="green"></div>
<div class="demo" touching="black"></div>
<div class="demo" touching="orange"></div>
<div class="demo" touching="top"></div>
<div class="demo" touching="green"></div>
<div class="demo" touching="black"></div>
<div class="demo" touching="orange"></div>
</div>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/jquery-3.3.1.min.js'></script>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/ajax/jquery.min.js'></script>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/jquery.hypher.js'></script>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/en-us.js'></script>
<script type="text/javascript" src='http://code.jquery.com/jquery-1.12.4.min.js'></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/3.0.5/isotope.pkgd.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Ответ №1:
У вас есть следующие проблемы в вашем коде:
- Вы пытаетесь получить значение высоты всех элементов,
$(".text-box")
не повторяя его; - Вы пытаетесь использовать несуществующую
innerHeight()
функцию для этих элементов; - То же самое, что указано в первом пункте, происходит, когда вы пытаетесь установить атрибут для элементов в
$(".bg")
.
Похоже, вам действительно нужно лучше понять основы JavaScript.
В приведенном ниже коде я перебираю текстовые поля и собираю значение высоты каждого из них внутри массива. Чтобы получить значения, я использую функцию getBoundingClientRect()
. Затем я перебираю вновь созданный массив, чтобы задать margin-top
стиль для каждого .bg
элемента с помощью функции jQuery css()
.
var textboxesHeight = $(".text-box").get().map(textbox => {
return textbox.getBoundingClientRect().height 'px';
});
textboxesHeight.forEach((val, i) => {
$(".bg").eq(i).css("margin-top", '-' val);
console.log(val);
});
* {
margin: 0;
padding: 0
}
.demo {
background-color: blue;
width: 100vw;
height: 100vh;
position: relative;
}
.demo.box-one {
background: grey;
}
.demo.box-two {
background: beige;
}
.demo.box-three {
background: blue;
}
.demo.box-four {
background: pink;
}
.demo.box-five {
background: orange;
}
.demo.box-six {
background: green;
}
.offset {
height: 500px;
}
.green {
background-color: green;
}
.black {
background-color: black;
}
.orange {
background-color: orange;
}
.top {
background-color: red;
position: relative;
}
.top .text-box {
position: fixed;
top: 0;
left: 3vw;
font-size: 10vw;
}
.bg {
width: 100%;
height: 100%;
position: sticky;
z-index: 99;
display: block;
margin-top: var(--height);
background-position: center center;
background-size: cover;
}
img {
height: 100%;
width: 100%;
}
.text-box {
position: sticky;
top: 0;
left: 3vw;
font-size: 10vw;
line-height: 11vw;
margin-bottom: -2vw;
z-index: 9999999;
width: auto;
height: auto;
display: block;
}
.stick {
position:fixed;
top:0px;
}
<div class="boxset">
<div class="demo" touching="top">
<span class="text-box">Danh Vo
Selected Bibliograph
2007 – 2015</span>
<span class="bg"><img src="http://archiv11.org/WordPress/wp-content/uploads/2015/08/00-DANH-VO-Biblio-IMG_2109-w1200.jpg"></span>
</div>
<div class="demo box-one" touching="top">
<span class="text-box">Installation view of Danh Vo
Uuntitled at the South London Gallery, 2019.</span>
<span class="bg"><img src="https://artmap.com/static/media/0000129000/0000128091.jpg"></span>
</div>
<div class="demo box-two" touching="top">
<span class="text-box">Blauorange 2007</span>
<span class="bg"></span>
</div>
<div class="demo box-three" touching="top">
<span class="text-box">Danh Vo
Selected Bibliograph
2007 – 2015</span>
<span class="bg"></span>
</div>
<div class="demo box-four" touching="top">
<span class="text-box">Félix González-Torres
"Untitled" (Portrait of Julie Ault)</span>
<span class="bg>
</div>
<div class="demo box-five" touching="top"></div>
<div class="demo box-six" touching="top"></div>
<div class="demo box-seven" touching="top"></div>
<div class="demo" touching="top"></div>
<div class="demo" touching="green"></div>
<div class="demo" touching="black"></div>
<div class="demo" touching="orange"></div>
<div class="demo" touching="top"></div>
<div class="demo" touching="green"></div>
<div class="demo" touching="black"></div>
<div class="demo" touching="orange"></div>
<div class="demo" touching="top"></div>
<div class="demo" touching="green"></div>
<div class="demo" touching="black"></div>
<div class="demo" touching="orange"></div>
</div>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/jquery-3.3.1.min.js'></script>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/ajax/jquery.min.js'></script>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/jquery.hypher.js'></script>
<script type="text/javascript" src='https://sommm.kr/onetwothreefourfive/js/en-us.js'></script>
<script type="text/javascript" src='http://code.jquery.com/jquery-1.12.4.min.js'></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/3.0.5/isotope.pkgd.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Комментарии:
1. Да, я учусь… Ваш совет был мне полезен. Я внимательно прочитаю его и изучу. Спасибо.