我正在重新学习HTML5和CSS技能,这是我第一次使用StackOverFlow。我有一个“灯箱型”照片库,可以在笔记本电脑上查看时在正确的位置显示左侧和右侧导航箭头,即,向左和向右偏左的箭头,以及向右和向右向右下方的箭头。但是,在Ipad或手机上(至少是我所见过的)查看时,箭头会出现在左上角和右上角,而不是下半部。这样做的问题是,右手现在与右上角的“ X”关闭按钮重叠,并且用户很难选择向右箭头或“关闭”按钮。我已经给作者发了电子邮件,但没有回音。我在下面粘贴了CSS和JS的全部内容(很抱歉!)。谢谢。
CSS开始 / *!
HesGallery v1.4.11
Copyright (c) 2018-2019 Artur Medrygal <medrygal.artur@gmail.com>
Product under MIT licence
*/
#hgallery {
display: block;
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
background-color: rgba(0, 0, 0, 0.9);
visibility: hidden;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
opacity: 0;
-webkit-transition: 0.3s;
transition: 0.3s;
z-index: 99999;
}
.hg-disable-scrolling {
overflow: hidden !important;
}
#hg-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100vh;
z-index: 1;
}
#hg-bg::after {
content: '';
position: absolute;
display: block;
top: 20px;
right: 20px;
width: 30px;
height: 30px;
background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjRkZGRkZGIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+Cjwvc3ZnPg==);
background-position: center;
background-size: contain;
cursor: pointer;
opacity: 0.8;
}
#hg-bg::after:hover {
background-color: white;
}
#hgallery.open {
visibility: visible !important;
opacity: 1;
}
#hg-pic-cont {
max-width: calc(70% - 40px);
max-height: 90vh;
cursor: default;
z-index: 12;
position: relative;
background-color: white;
-webkit-transition: -webkit-transform 0.3s;
transition: -webkit-transform 0.3s;
transition: transform 0.3s;
transition: transform 0.3s, -webkit-transform 0.3s;
-webkit-transform: scale(1);
transform: scale(1);
}
#hg-pic-cont.hg-transition {
-webkit-transform: scale(0.1);
transform: scale(0.1);
}
#hg-subtext {
color: #ddd;
font-size: 14px;
position: absolute;
display: block;
left: 5px;
top: calc(100% + 6px);
}
#hg-howmany {
color: #aaa;
font-size: 14px;
position: absolute;
display: block;
right: 5px;
bottom: -20px;
}
#hg-pic {
width: auto;
height: auto;
min-height: 100px;
min-width: 100px;
max-width: 100%;
max-height: 90vh;
-webkit-box-sizing: border-box;
box-sizing: border-box;
display: block;
cursor: default;
-o-object-fit: contain;
object-fit: contain;
margin: 0;
/* border-radius: 5px;*/
}
#hg-pic:hover {
-webkit-transform: none;
transform: none;
-webkit-box-shadow: none;
box-shadow: none;
}
#hgallery button {
position: absolute;
display: block;
margin: auto 0;
width: 60px;
height: 60px;
z-index: 11;
cursor: pointer;
background-color: transparent;
background-image: url('data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjZmZmZmZmIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiAgICA8cGF0aCBkPSJNOC41OSAxNi4zNGw0LjU4LTQuNTktNC41OC00LjU5TDEwIDUuNzVsNiA2LTYgNnoiLz4NCiAgICA8cGF0aCBkPSJNMC0uMjVoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4NCjwvc3ZnPg==');
background-size: contain;
border: 0;
outline: 0;
opacity: 0;
-webkit-transition: opacity 0.3s, visibility 0.3s;
transition: opacity 0.3s, visibility 0.3s;
visibility: hidden;
}
#hgallery.open button {
visibility: visible;
opacity: 0.7;
}
#hgallery button:hover {
opacity: 1;
}
#hgallery button#hg-prev {
left: 10px;
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
#hgallery button#hg-prev:active {
left: 7px;
}
#hgallery button#hg-next {
right: 10px;
}
#hgallery button#hg-next:active {
right: 7px;
}
#hgallery #hg-prev-onpic,
#hgallery #hg-next-onpic {
position: absolute;
top: 0;
left: 0;
width: 34%;
height: 100%;
cursor: pointer;
}
#hgallery #hg-next-onpic {
right: 0;
left: auto;
width: 66%;
}
.hg-unvisible {
opacity: 0 !important;
visibility: hidden;
}
@media (max-width: 1100px) {
#hg-pic-cont {
max-width: calc(100% - 40px);
}
}
------------------------------------------------------------------------
JAVASCRIPT BEGIN
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/*!
HesGallery v1.4.11
Copyright (c) 2018-2019 Artur Medrygal <medrygal.artur@gmail.com>
Product under MIT licence
*/
var HesGallery = {
options: {
// Default settings
// Global
disableScrolling: false,
hostedStyles: false,
animations: true,
keyboardControl: true,
minResolution: 0,
autoInit: true,
// Local
wrapAround: false,
showImageCount: false
},
version: '1.4.11'
};
function HesSingleGallery(index, root) {
var _this = this;
this.root = root;
this.index = index;
this.imgPaths = [];
this.subTexts = [];
this.altTexts = [];
this.options = {};
var gallery = document.getElementsByClassName('hes-gallery')[this.index];
this.options.wrapAround = gallery.hasAttribute('data-wrap') ? gallery.dataset.wrap == 'true' : this.root.options.wrapAround;
this.options.showImageCount = gallery.hasAttribute('data-img-count') ? gallery.dataset.imgCount == 'false' : this.root.options.showImageCount;
var disabledCount = 0;
gallery.querySelectorAll('img').forEach(function (image, i) {
if (image.hasAttribute('data-disabled')) disabledCount++;else {
if (image.hasAttribute('data-fullsize')) _this.imgPaths.push(image.dataset.fullsize || '');else _this.imgPaths.push(image.src || '');
_this.subTexts.push(image.dataset.subtext || '');
_this.altTexts.push(image.alt || '');
// image.setAttribute('onclick', `HesGallery.show(${this.index},${i - disabledCount})`)
image.onclick = function () {
_this.root.show(_this.index, i - disabledCount);
};
}
});
this.count = this.imgPaths.length;
}
HesGallery.setOptions = function () {
var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
for (var key in values) {
this.options[key] = values[key];
}
};
HesGallery.init = function (options) {
var _this2 = this;
this.setOptions(options);
if (!this.executed) this.createDOM();
if (this.options.animations) this.elements.pic_cont.classList = 'hg-transition';else this.elements.pic_cont.classList = '';
this.count = document.querySelectorAll('.hes-gallery').length;
this.galleries = [];
for (var i = 0; i < this.count; i++) {
// Creates a galleries
this.galleries[i] = new HesSingleGallery(i, this);
}
// KeyDown event listener
if (this.options.keyboardControl && !this.keydownEventListener) {
addEventListener('keydown', function (_ref) {
var keyCode = _ref.keyCode;
if (keyCode == 39 && _this2.open && _this2.options.keyboardControl) _this2.next();
if (keyCode == 37 && _this2.open && _this2.options.keyboardControl) _this2.prev();
if (keyCode == 27 && _this2.open && _this2.options.keyboardControl) _this2.hide();
});
this.keydownEventListener = true;
}
return 'HesGallery initiated!';
};
HesGallery.createDOM = function () {
var _this3 = this;
// Creates DOM Elements for gallery
this.elements = {};
if (this.options.hostedStyles) document.head.innerHTML += "<link rel='stylesheet' href='https://unpkg.com/hes-gallery/dist/hes-gallery.min.css'>";
var gal = document.createElement('div');
gal.id = 'hgallery';
gal.setAttribute('style', 'visibility:hidden;');
this.elements.galery = gal; // Whole gallery
this.elements.galery.innerHTML += '\n <div id=\'hg-bg\'></div>\n <div id=\'hg-pic-cont\'>\n <img id=\'hg-pic\' />\n <div id=\'hg-prev-onpic\'></div>\n <div id=\'hg-next-onpic\'></div>\n <div id=\'hg-subtext\'></div>\n <div id=\'hg-howmany\'></div>\n </div>\n <button id=\'hg-prev\'></button>\n <button id=\'hg-next\'></button>\n ';
document.body.appendChild(gal);
this.elements.b_prev = document.getElementById('hg-prev');
this.elements.b_next = document.getElementById('hg-next');
this.elements.pic_cont = document.getElementById('hg-pic-cont');
this.elements.b_next_onpic = document.getElementById('hg-next-onpic');
this.elements.b_prev_onpic = document.getElementById('hg-prev-onpic');
this.elements.b_prev.onclick = this.elements.b_prev_onpic.onclick = function () {
_this3.prev();
};
this.elements.b_next.onclick = this.elements.b_next_onpic.onclick = function () {
_this3.next();
};
document.getElementById('hg-bg').onclick = function () {
_this3.hide();
};
this.executed = true;
};
HesGallery.show = function (g, i) {
if (innerWidth < this.options.minResolution) return false; // If browser width is less than min resolution in settings
this.currentImg = i;
this.currentGal = g;
this.open = true;
if (this.options.animations || this.elements.pic_cont.classList == 'hg-transition') this.elements.pic_cont.classList.remove('hg-transition');
document.getElementById('hg-pic').setAttribute('src', this.galleries[g].imgPaths[i]); // Sets the path to image
document.getElementById('hg-pic').alt = this.galleries[g].altTexts[i]; // Sets alt attribute
this.elements.galery.classList.add('open');
document.getElementById('hg-subtext').innerHTML = this.galleries[g].subTexts[i];
if (this.galleries[this.currentGal].options.showImageCount && this.galleries[this.currentGal].imgPaths.length != 1) document.getElementById('hg-howmany').innerHTML = this.currentImg + 1 + '/' + this.galleries[g].count;else document.getElementById('hg-howmany').innerHTML = '';
// Visibility of next/before buttons in gallery
if (this.galleries[this.currentGal].imgPaths.length == 1) {
// One image in gallery
this.elements.b_prev.classList = 'hg-unvisible';
this.elements.b_prev_onpic.classList = 'hg-unvisible';
this.elements.b_next.classList = 'hg-unvisible';
this.elements.b_next_onpic.classList = 'hg-unvisible';
} else if (this.currentImg + 1 == 1 && !this.galleries[this.currentGal].options.wrapAround) {
// First photo
this.elements.b_prev.classList = 'hg-unvisible';
this.elements.b_prev_onpic.classList = 'hg-unvisible';
this.elements.b_next.classList = '';
this.elements.b_next_onpic.classList = '';
} else if (this.currentImg + 1 == this.galleries[this.currentGal].count && !this.galleries[this.currentGal].options.wrapAround) {
// Last photo
this.elements.b_next.classList = 'hg-unvisible';
this.elements.b_next_onpic.classList = 'hg-unvisible';
this.elements.b_prev.classList = '';
this.elements.b_prev_onpic.classList = '';
} else {
//Dowolne zdjęcie
this.elements.b_next.classList = '';
this.elements.b_next_onpic.classList = '';
this.elements.b_prev.classList = '';
this.elements.b_prev_onpic.classList = '';
}
if (this.options.disableScrolling) document.body.classList += ' hg-disable-scrolling'; // Disable scroll
};
HesGallery.hide = function () {
if (this.options.animations) this.elements.pic_cont.classList.add('hg-transition');
this.elements.galery.classList.remove('open');
this.open = false;
if (this.options.disableScrolling) document.body.classList.remove('hg-disable-scrolling'); // Enable scroll
};
HesGallery.next = function () {
if (this.galleries[this.currentGal].options.wrapAround && this.currentImg == this.galleries[this.currentGal].count - 1) this.show(this.currentGal, 0);else if (this.currentImg + 1 < this.galleries[this.currentGal].count) this.show(this.currentGal, this.currentImg + 1);
};
HesGallery.prev = function () {
if (this.galleries[this.currentGal].options.wrapAround && this.currentImg == 0) this.show(this.currentGal, this.galleries[this.currentGal].count - 1);else if (this.currentImg + 1 > 1) this.show(this.currentGal, this.currentImg - 1);
};
document.addEventListener('DOMContentLoaded', function () {
if (HesGallery.options.autoInit) HesGallery.init();
});
if ('object' == (typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) && 'undefined' != typeof module) module.exports = HesGallery;
// NodeList polyfill
if (typeof NodeList !== 'undefined' && NodeList.prototype && !NodeList.prototype.forEach) {
NodeList.prototype.forEach = Array.prototype.forEach;
}