2025-05-12 16:42:36 +09:00
|
|
|
$(function () {
|
|
|
|
$.ajax({
|
2025-05-13 17:14:19 +09:00
|
|
|
url: "http://localhost:8080/inuhouse",
|
2025-05-12 16:42:36 +09:00
|
|
|
type: "GET",
|
|
|
|
success: function (dogs) {
|
|
|
|
const $slider = $('#sliderContainer');
|
|
|
|
const slideWidth = 270;
|
|
|
|
const centerOffset = 1;
|
|
|
|
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
preloadImages(dogs.map(d => d.image), () => {
|
|
|
|
// $('#sliderContainer').html(dogs.map(createSlideHTML).join(''));
|
|
|
|
const slidesHTML = generateCarouselHTML(dogs);
|
|
|
|
$slider.html(slidesHTML);
|
|
|
|
|
|
|
|
|
|
|
|
// const totalSlides = slides.length;
|
|
|
|
// $slider.html(slidesHTML);
|
|
|
|
const totalSlides = dogs.length + 2;
|
|
|
|
|
|
|
|
let currentIndex = 1;
|
|
|
|
|
|
|
|
animateTo(currentIndex);
|
|
|
|
|
|
|
|
$('.right-btn').on('click', function () {
|
|
|
|
if ($slider.is(':animated')) return;
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
currentIndex++;
|
|
|
|
animateTo(currentIndex);
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
if (currentIndex === totalSlides - 1) {
|
|
|
|
// animateTo(currentIndex);
|
|
|
|
requestAnimationFrame(() => {
|
|
|
|
requestAnimationFrame(() => {
|
|
|
|
currentIndex = 1;
|
|
|
|
jumpTo(currentIndex);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
});
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
|
|
|
|
$('.left-btn').on('click', function () {
|
|
|
|
if ($slider.is(':animated')) return;
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
currentIndex--;
|
|
|
|
animateTo(currentIndex);
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
|
|
|
|
|
|
|
|
if (currentIndex === 0) {
|
|
|
|
// animateTo(currentIndex);
|
|
|
|
requestAnimationFrame(() => {
|
|
|
|
requestAnimationFrame(() => {
|
|
|
|
currentIndex = totalSlides - 2;
|
|
|
|
jumpTo(currentIndex);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
});
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
});
|
|
|
|
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
$('#uploadBtn').on('click', function () {
|
|
|
|
const fileInput = $('#fileInput')[0];
|
|
|
|
const file = fileInput.files[0];
|
|
|
|
if (!file) {
|
|
|
|
$('#uploadResult').html('ファイルを選択してください');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const formData = new FormData();
|
|
|
|
formData.append('file', file);
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
url: 'http://localhost:8080/upload',
|
|
|
|
type: 'POST',
|
|
|
|
data: formData,
|
|
|
|
processData: false,
|
|
|
|
contentType: false,
|
|
|
|
success: function () {
|
|
|
|
$('#uploadResult').html('成功!');
|
|
|
|
},
|
|
|
|
error: function () {
|
|
|
|
$('#uploadResult').html('やり直してください!');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
$('#downloadBtn').on('click', function () {
|
|
|
|
const fileUrl = 'http://localhost:8080/download-image';
|
|
|
|
const a = document.createElement('a');
|
|
|
|
a.href = fileUrl;
|
|
|
|
document.body.appendChild(a);
|
|
|
|
a.click();
|
|
|
|
document.body.removeChild(a);
|
|
|
|
});
|
|
|
|
|
2025-05-13 17:14:19 +09:00
|
|
|
|
|
|
|
$(function () {
|
|
|
|
|
|
|
|
$('#goToLogin').on('click', function () {
|
|
|
|
$('#loginModal').fadeIn();
|
|
|
|
});
|
|
|
|
|
|
|
|
// $('#goToRegister').on('click', function () {
|
|
|
|
// $('#registerModal').fadeIn();
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
|
|
$('#closeLoginModal, #cancelLogin').on('click', function () {
|
|
|
|
$('#loginModal').fadeOut();
|
|
|
|
});
|
|
|
|
|
|
|
|
// $('#closeRegisterModal, #cancelRegister').on('click', function () {
|
|
|
|
// $('#registerModal').fadeOut();
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
|
|
// $('#submitRegister').on('click', function () {
|
|
|
|
// const username = $('#registerUsername').val().trim();
|
|
|
|
// const email = $('#registerEmail').val().trim();
|
|
|
|
// const password = $('#registerPassword').val().trim();
|
|
|
|
// const confirmPassword = $('#registerConfirmPassword').val().trim();
|
|
|
|
|
|
|
|
// if (!email || !password || !confirmPassword) {
|
|
|
|
// alert('必須項目をすべて入力してください');
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (password !== confirmPassword) {
|
|
|
|
// alert('パスワードが一致しません');
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
|
|
|
|
// const requestData = {
|
|
|
|
// username: username || null,
|
|
|
|
// email: email,
|
|
|
|
// password: password
|
|
|
|
// };
|
|
|
|
|
|
|
|
// $.ajax({
|
|
|
|
// url: 'http://192.168.1.192:8085/api/user/register',
|
|
|
|
// type: 'POST',
|
|
|
|
// contentType: 'application/json',
|
|
|
|
// data: JSON.stringify(requestData),
|
|
|
|
// success: function () {
|
|
|
|
// alert('登録成功!');
|
|
|
|
// window.location.href = 'index.html';
|
|
|
|
// $('#registerModal').fadeOut();
|
|
|
|
// },
|
|
|
|
// error: function () {
|
|
|
|
// alert('登録に失敗しました: ');
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
// });
|
|
|
|
|
|
|
|
$('#submitLogin').on('click', function () {
|
|
|
|
const email = $('#loginEmail').val().trim();
|
|
|
|
const password = $('#loginPassword').val().trim();
|
|
|
|
|
|
|
|
if (!email || !password) {
|
|
|
|
alert('メールアドレスとパスワードを入力してください');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
const requestData = {
|
|
|
|
email: email,
|
|
|
|
password: password
|
|
|
|
};
|
|
|
|
|
|
|
|
$.ajax({
|
2025-05-19 11:43:26 +09:00
|
|
|
url: 'http://localhost:8080/api/user/login',
|
2025-05-13 17:14:19 +09:00
|
|
|
type: 'POST',
|
|
|
|
contentType: 'application/json',
|
|
|
|
data: JSON.stringify(requestData),
|
|
|
|
success: function (response) {
|
|
|
|
const token = response.token;
|
|
|
|
localStorage.setItem('authToken', token);
|
|
|
|
alert('ログイン成功!');
|
|
|
|
window.location.href = 'index.html';
|
|
|
|
$('#loginModal').fadeOut();
|
|
|
|
},
|
|
|
|
error: function () {
|
|
|
|
alert('ログインに失敗しました');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
function preloadImages(urls, callback) {
|
|
|
|
let loaded = 0;
|
|
|
|
urls.forEach(src => {
|
|
|
|
const img = new Image();
|
|
|
|
img.onload = () => {
|
|
|
|
loaded++;
|
|
|
|
if (loaded === urls.length) callback();
|
|
|
|
};
|
|
|
|
img.src = src;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function createSlideHTML(dog) {
|
|
|
|
return `
|
|
|
|
<div class="slide">
|
|
|
|
<div class="card flip-card">
|
|
|
|
<div class="flip-inner">
|
|
|
|
<div class="flip-front">
|
|
|
|
<img src="${dog.image}" alt="${dog.name}" />
|
|
|
|
</div>
|
|
|
|
<div class="flip-back d-flex flex-column justify-content-center align-items-center text-white p-3">
|
|
|
|
<h4>${dog.name}</h4>
|
|
|
|
<p class="text-center">${dog.description}</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
`;
|
|
|
|
}
|
|
|
|
|
|
|
|
function generateCarouselHTML(dogList) {
|
2025-05-13 17:14:19 +09:00
|
|
|
|
2025-05-12 16:42:36 +09:00
|
|
|
if (!dogList || dogList.length === 0) return '';
|
|
|
|
|
|
|
|
const redundantList = [
|
|
|
|
dogList[dogList.length - 1],
|
|
|
|
...dogList,
|
|
|
|
dogList[0]
|
|
|
|
];
|
|
|
|
|
|
|
|
return redundantList.map(createSlideHTML).join('');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function animateTo(index) {
|
|
|
|
const offset = slideWidth * (index - centerOffset);
|
|
|
|
$slider.css({
|
|
|
|
transform: `translateX(-${offset}px)`,
|
|
|
|
transition: 'transform 0.5s ease'
|
|
|
|
});
|
|
|
|
updateScale(index);
|
|
|
|
}
|
|
|
|
|
|
|
|
function jumpTo(index) {
|
|
|
|
const offset = slideWidth * (index - centerOffset);
|
|
|
|
$slider.css({
|
|
|
|
transition: 'none',
|
|
|
|
transform: `translateX(-${offset}px)`
|
|
|
|
});
|
|
|
|
updateScale(index);
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateScale(centerIndex) {
|
|
|
|
$('#sliderContainer .slide .card').each(function (i) {
|
|
|
|
const scale = i === centerIndex ? 1.1 : 1;
|
|
|
|
$(this).css({
|
|
|
|
transform: `scale(${scale})`,
|
|
|
|
transition: 'transform 0.5s ease'
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
error: function () {
|
|
|
|
console.error("犬データの取得に失敗しました。");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|