Фоновые изображения меняются одним кликом - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь изменить мои 4 фоновых изображения на mouseclick.

В данный момент одно и то же изображение появляется на экране 4 раза (по 1 в каждом углу). Мне бы хотелось, чтобы только одно изображение появлялось на весь экран, а другие заменяли его при нажатии на текущее изображение;и так далее и тому подобное, когда вы нажмете снова. Я не уверен, что не так с моим кодом в данный момент.

HTML:

<!DOCTYPE html>
<html lang="fr" dir="ltr">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

  <title> CODE </title>
  <link rel="stylesheet" type="text/css" href="css/style.css"/>
  <script src="js/jquery.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

  <script src="js/sketch.js"></script>

</head>

<body>

<div id="body" class="imageOne"></div>

</body>

</html>

JS:

var bodyObj,
  className,
  index;

bodyObj = document.getElementById('body');
index = 1;
className = [
  'imageOne',
  'imageTwo'
];

function updateIndex() {
  if (index === 0) {
    index = 1;
  } else {
    index = 0;
  }
}

bodyObj.onclick = function(e) {
  e.currentTarget.className = className[index];
  updateIndex();
}

CSS:

html, body, #body {
    height: 100%;
    width: 100%;
}

#body.imageOne {
    background-image: url("img1.png");
}

#body.imageTwo {
    background-image: url("img2.png");
}

#body.imageTwo {
    background-image: url("img3.png");
}

#body.imageTwo {
    background-image: url("img4.png");
}

Ответы [ 3 ]

1 голос
/ 23 октября 2019

Вот еще один способ (используя классы, как вы сделали):

var bodyObj   = document.getElementById('body'),
    index     = 0,
    className = [
      'imageOne',
      'imageTwo',
      'imageThree',
      'imageFour'
    ];

bodyObj.onclick = function(e) {
  index = (index + 1) % className.length;
  e.currentTarget.className = className[index];
}
html,body,#body { margin: 0; height: 100%; width: 100%; }

#body { background-position: center; background-size: cover; }

#body.imageOne { background-image: url("https://picsum.photos/id/9/536/354"); }
#body.imageTwo { background-image: url("https://picsum.photos/id/3/536/354"); }
#body.imageThree { background-image: url("https://picsum.photos/id/1/536/354"); }
#body.imageFour { background-image: url("https://picsum.photos/id/2/536/354"); }
<div id="body" class="imageOne"></div>
1 голос
/ 23 октября 2019

Вместо того, чтобы использовать классы для каждого изображения, было бы хорошо сохранить их в массиве и затем изменить их программно. Пожалуйста, найдите фрагмент ниже.

let imgList = [
  'https://dummyimage.com/200x200/000/fff&text=image+1',
  'https://dummyimage.com/200x200/000/fff&text=image+2', 'https://dummyimage.com/200x200/000/fff&text=image+3', 'https://dummyimage.com/200x200/000/fff&text=image+4'
];

let currentIndex = 0;

function changeImg() {
  $('#body').css('backgroundImage', `url(${imgList[currentIndex]})`);
  currentIndex++;
  if (currentIndex == imgList.length) currentIndex = 0;
}

changeImg();

$('#body').on('click', changeImg);
#body {
  width: 200px;
  height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="body" class="imageOne"></div>
0 голосов
/ 23 октября 2019

Я попробовал этот, который работает очень хорошо!

var index = 0;
var className = ['imageOne',
'imageTwo',
'imageThree',
'imageFour',
'imageFive'];

$(document).ready(function() {
$("#main").on("click", function() {
index = (index + 1) % className.length;
$(this).attr('class', className[index]);
});
});
...