Как предотвратить перемещение кнопки при нажатии? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть этот код:

<!DOCTYPE html>
<html>
<body>
<head>
<script>


function Show(element){
element.style.display = "block";
}


function Hide(element){
element.style.display = "none";
}


function Slide(){

try{

img1 = img1id.style.display;
img2 = img2id.style.display;
img3 = img3id.style.display;

if(img1 =="none" && img2=="none"){
Show(img1id);
Hide(img3id);
}

else if(img2 == "block" && img1=="none"){
Hide(img2id)
Show(img3id);
}

else if(img3 == "block" && img1 == "none" && img2 == "none"){
Show(img1id);
Hide(img3id);	
}

else {
Hide(img1id);
Hide(img3id);
Show(img2id);
}

}

catch(e){
alert("Evento " + e);

}

}


var img1id;
var img2id;
var img3id;
var buttonid;


function gestoreLoad(){
try{

img1id = document.getElementById("id1");
img2id = document.getElementById("id2");
img3id = document.getElementById("id3");
buttonid = document.getElementById("id4");
buttonid.onclick = Slide;

}
catch(e) {
alert("gestoreLoad " + e);
}
}

window.onload = gestoreLoad;
</script>
<style type="text/css">

button:active {
  padding: 0px;
}

button#id4 {
	margin: auto auto auto auto;
	font-weight: bold;
	height: 80px;
	width: 150px;
	background-color: #000;
	color: #FFF;
	border-radius: 20px 20px 20px 20px;
	font-size: 1.5em;
}


img {
	 -webkit-animation: fadein 2s; /* Safari, Chrome and Opera > 12.1 */
       -moz-animation: fadein 2s; /* Firefox < 16 */
        -ms-animation: fadein 2s; /* Internet Explorer */
         -o-animation: fadein 2s; /* Opera < 12.1 */
            animation: fadein 2s;
}

@keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Firefox < 16 */
@-moz-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Safari, Chrome and Opera > 12.1 */
@-webkit-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Internet Explorer */
@-ms-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Opera < 12.1 */
@-o-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}
	</style>
</head>
<center>
<img id="id1" style="width:800px; height:400px;" src="https://image.shutterstock.com/image-photo/beatiful-nature-lake-forest-pang-260nw-1039096585.jpg" />
<img id="id2" style="display:none; width:800px; height:400px;" src="https://thumbs.dreamstime.com/b/fragment-traditional-iranian-architecture-against-beatiful-purple-sky-yellow-pink-clouds-beautiful-sunset-iranian-122642415.jpg" />
<img id="id3" style="display:none; width:800px; height:400px;" src="https://live.staticflickr.com/5808/21804482933_2b1279ef62_b.jpg" />
</center>

<br />
<center>
<button id="id4" /><span>Slideshow!</span></button>
</center>

</body>
</html>

Для примера я беру несколько изображений из inte rnet. Кстати, когда я нажимаю на кнопку в первый раз (так после загрузки страницы), она движется вверх ... Знаете ли вы какие-либо решения?

Ps Я знаю, что в W3chools есть коды для слайд-шоу, которые отлично работают, но я бы попробовал сам и узнать больше о JavaScript для развлечения

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Вот что я наблюдал:

  1. Кнопка, которую вы использовали, неверна, я тоже ее изменил.
  2. Вы должны go через JavaScript Метод, который вы написали в основном, это причина, почему кнопка мерцает в первый раз, почему? Это происходит потому, что когда происходит событие первого щелчка, оно всегда переходит к последнему состоянию else, и оно делает первое изображение скрытым, и к тому времени кнопка начинает двигаться вверх, тогда как другой show() возвращает изображение на место. Теперь, если вы думаете, почему это не произошло для второго и третьего клика, это потому, что первое изображение теперь имеет свойство display либо none, либо block.

В первый раз свойство display для первого изображения всегда null, вы можете проверить его, добавив alert(), который вы узнаете, поэтому, чтобы решить проблему, у меня есть сделано, так как вы хотите, чтобы первое изображение отображалось во время загрузки страницы, поэтому я использовал display:block; для первого изображения во встроенном запросе, поэтому, когда вы нажимаете кнопку в первый раз вместо возврата нулевого значения, теперь оно возвращает block как свойство и, следовательно, останавливает кнопку для перемещения вверх.

Я полагаю, вы получили то, что я пытаюсь передать здесь, если мы не сможем подключиться.

ниже приведено рабочий код (не стесняйтесь изменять вещи)

function Show(element) {
  element.style.display = "block";
}


function Hide(element) {
  element.style.display = "none";
}


function Slide() {

  try {

    img1 = img1id.style.display;
    img2 = img2id.style.display;
    img3 = img3id.style.display;

    if (img1 === "none" && img2 == "none") {
      Show(img1id);
      Hide(img3id);
    } else if (img2 == "block" && img1 == "none") {
      Hide(img2id)
      Show(img3id);
    } else if (img3 == "block" && img1 == "none" && img2 == "none") {
      alert("none");
      Show(img1id);
      Hide(img3id);
    } else {
      Hide(img1id);
      Hide(img3id);
      Show(img2id);
    }

  } catch (e) {
    alert("Evento " + e);

  }

}


var img1id;
var img2id;
var img3id;
var buttonid;


function gestoreLoad() {
  try {

    img1id = document.getElementById("id1");
    img2id = document.getElementById("id2");
    img3id = document.getElementById("id3");
    buttonid = document.getElementById("id4");
    buttonid.onclick = Slide;

  } catch (e) {
    alert("gestoreLoad " + e);
  }
}

window.onload = gestoreLoad;
button:active {
  padding: 0px;
}

button#id4 {
  margin: auto auto auto auto;
  font-weight: bold;
  height: 80px;
  width: 150px;
  border-radius: 20px 20px 20px 20px;
  background-color: #000;
  color: #FFF;
  font-size: 1.5em;
}

img {
  -webkit-animation: fadein 2s;
  /* Safari, Chrome and Opera > 12.1 */
  -moz-animation: fadein 2s;
  /* Firefox < 16 */
  -ms-animation: fadein 2s;
  /* Internet Explorer */
  -o-animation: fadein 2s;
  /* Opera < 12.1 */
  animation: fadein 2s;
}

@keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}


/* Firefox < 16 */

@-moz-keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}


/* Safari, Chrome and Opera > 12.1 */

@-webkit-keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}


/* Internet Explorer */

@-ms-keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}


/* Opera < 12.1 */

@-o-keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
<center>
  <img id="id1" style="display:block; width:800px; height:400px;" src="https://image.shutterstock.com/image-photo/beatiful-nature-lake-forest-pang-260nw-1039096585.jpg" />
  <img id="id2" style="display:none; width:800px; height:400px;" src="https://thumbs.dreamstime.com/b/fragment-traditional-iranian-architecture-against-beatiful-purple-sky-yellow-pink-clouds-beautiful-sunset-iranian-122642415.jpg" />
  <img id="id3" style="display:none; width:800px; height:400px;" src="https://live.staticflickr.com/5808/21804482933_2b1279ef62_b.jpg" />
</center>
<br />
<center>
  <button id="id4" type="button">Slideshow!</button>
</center>
0 голосов
/ 02 апреля 2020

Похоже, добавив border: 0 к button#id4, добьемся цели. По крайней мере, в тегах Firefox и Chrome.

BTW <center> устарели. Вы должны использовать CSS для центрирования вашего контента.

<!DOCTYPE html>
<html>
<body>
<head>
<script>


function Show(element){
element.style.display = "block";
}


function Hide(element){
element.style.display = "none";
}


function Slide(){

try{

img1 = img1id.style.display;
img2 = img2id.style.display;
img3 = img3id.style.display;

if(img1 =="none" && img2=="none"){
Show(img1id);
Hide(img3id);
}

else if(img2 == "block" && img1=="none"){
Hide(img2id)
Show(img3id);
}

else if(img3 == "block" && img1 == "none" && img2 == "none"){
Show(img1id);
Hide(img3id);	
}

else {
Hide(img1id);
Hide(img3id);
Show(img2id);
}

}

catch(e){
alert("Evento " + e);

}

}


var img1id;
var img2id;
var img3id;
var buttonid;


function gestoreLoad(){
try{

img1id = document.getElementById("id1");
img2id = document.getElementById("id2");
img3id = document.getElementById("id3");
buttonid = document.getElementById("id4");
buttonid.onclick = Slide;

}
catch(e) {
alert("gestoreLoad " + e);
}
}

window.onload = gestoreLoad;
</script>
<style type="text/css">

button:active {
  padding: 0px;
}

button#id4 {
	margin: auto auto auto auto;
	font-weight: bold;
	height: 80px;
	width: 150px;
	background-color: #000;
	color: #FFF;
    border: 0;
	border-radius: 20px 20px 20px 20px;
	font-size: 1.5em;
}


img {
	 -webkit-animation: fadein 2s; /* Safari, Chrome and Opera > 12.1 */
       -moz-animation: fadein 2s; /* Firefox < 16 */
        -ms-animation: fadein 2s; /* Internet Explorer */
         -o-animation: fadein 2s; /* Opera < 12.1 */
            animation: fadein 2s;
}

@keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Firefox < 16 */
@-moz-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Safari, Chrome and Opera > 12.1 */
@-webkit-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Internet Explorer */
@-ms-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}

/* Opera < 12.1 */
@-o-keyframes fadein {
    from { opacity: 0; }
    to   { opacity: 1; }
}
	</style>
</head>
<center>
<img id="id1" style="width:800px; height:400px;" src="https://image.shutterstock.com/image-photo/beatiful-nature-lake-forest-pang-260nw-1039096585.jpg" />
<img id="id2" style="display:none; width:800px; height:400px;" src="https://thumbs.dreamstime.com/b/fragment-traditional-iranian-architecture-against-beatiful-purple-sky-yellow-pink-clouds-beautiful-sunset-iranian-122642415.jpg" />
<img id="id3" style="display:none; width:800px; height:400px;" src="https://live.staticflickr.com/5808/21804482933_2b1279ef62_b.jpg" />
</center>

<br />
<center>
<button id="id4" /><span>Slideshow!</span></button>
</center>

</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...