#javascript #jquery #html #css
#javascript #jquery #HTML #css
Вопрос:
Я создаю небольшую программу на html-jquery, которая динамически генерирует таблицу, в которой в каждой ячейке есть слайд-шоу. В слайд-шоу отображаются изображения, которые вы выбираете из папки на вашем компьютере.
Проблема в том, что когда я выбираю папку, слайд-шоу приобретает высоту 100vh для каждой ячейки со слайд-шоу. Я не могу понять, как предотвратить увеличение размера слайд-шоу больше, чем содержащая ячейка.
HTML
<body style="height:100vh;">
<div class="row">
<div class="container-fluid">
Rows: <input id="sRows" type="number" name="" value="2">
Columns: <input id="sCol" type="number" name="" value="2">
<button id="btnGen" type="button" name="button">Generate!</button>
</div>
</div>
<div id="slideshowContiner" class="w3-table-all" >
</div>
</body>
CSS
#slideshowContiner {
table-layout: fixed;
height: 100%;
}
.slider{
max-width:100%;
max-height: 100%;
}
.mySlide{
width:100%;
height:auto;
}
Для кода Javascript, возможно, слишком длинный для чтения, наконец, созданная структура, внутри #slideshowContiner
есть что-то вроде этого:
<div id="slideshowContiner" class="w3-table-all">
<tr></tr>
<td style="background-color:#6a833c">
<input webkitdirectory="" mozdirectory="" msdirectory="" odirectory="" directory="" multiple="" type="file" name="file">
<div class="w3-content w3-section slider" style="">
<img class="mySlide" style="display: none;" src="blob:null/">
<img class="mySlide" style="display: none;" src="blob:null/">
<img class="mySlide" style="display: none;" src="blob:null/">
</div>
</td>
</div>
Jquery (TL: DR;)
$( document ).ready(function() {
var randomColor = function (){
return '#' ('000000' Math.floor(Math.random()*16777215).toString(16)).slice(-6);
}
var sliders = []
var myIndex = 0;
function carousel() {
var i;
var slides = elem.children( ".mySlide" ).css("display", "none")
console.log(slides, this);
}
function createSlider(files){
var slider = $('<div class="w3-content w3-section slider" style=""></div>')
for (var i = 0; i < files.length; i ) {
prev = $('<img class="mySlide" style="">').attr("src", URL.createObjectURL(files[i]))
slider.append(prev)
}
sliders.push(slider)
// slider.data("id", inn )
var myIndex = 0;
slider.data("slideshow", function(){
console.log(myIndex);
var slides = slider.children( ".mySlide" ).css("display", "none")
myIndex ;
if (myIndex > slides.length) {myIndex = 1}
console.log(slides[myIndex]);
$(slides[myIndex-1]).css("display", "block")
setTimeout(slider.data("slideshow"), 2000)
})
return slider
}
var sContainer = $("#slideshowContiner")
var sRows = $("#sRows")
var sCol = $("#sCol")
var btnGen = $("#btnGen")
function genGrid(){
sContainer.html("")
for (var i = 0; i < sRows.val(); i ) {
var newRow = sContainer.append('<tr></tr>')
// var newRow = sContainer.append('<div class="row flex-fill d-flex " style="border: 1px solid;"></div>')
for (var x = 0; x < sCol.val(); x ) {
var newCol = $('<td style="background-color:' randomColor() '"></td>')
newRow.append(newCol);
var input = $('<input webkitdirectory mozdirectory msdirectory odirectory directory multiple/>')
.attr('type', "file")
.attr('name', "file")
.on("change", function() {
cell = $(this).data("cell")
var s = createSlider(this.files)
cell.append(s)
// carousel(s)
var init = s.data("slideshow")();
})
.data("cell", newCol);;
newCol.append($(input))
}
}
}
genGrid()
btnGen.click(genGrid)
Примечание: в этом скрипте style="height:100vh;"
находятся в корневом div, в исходном коде — в теге body.
Комментарии:
1. добавьте jsfiddle или сниппет, я не понимаю вашей проблемы: D
2. Я добавляю скрипку!
Ответ №1:
Вы могли бы установить для каждого изображения фиксированную высоту, используя статическую единицу измерения, такую px
как в вашем классе, и использовать несколько мультимедийных запросов для управления их размерами в разных разрешениях. Таким образом, вы можете ожидать, как они будут выглядеть.
Комментарии:
1. Я никогда раньше этого не делал, не могли бы вы привести какой-нибудь пример / руководство?
2.
.mySlide{ width:100%; height: 128px; }
вместоauto
я ставлю128px
. Попробуйте изменить это в своем коде.3. Но, как вы видите в jsfiddle, ячейка генерируется автоматически, в зависимости от того, сколько строк ячеек выбирает пользователь. Как я могу установить высоту на основе этого и на экране пользователя?