Η χρονιά… όνειρο που κάνει ο Έρλινγκ Χάαλαντ με την φανέλα της Ντόρτμουντ συνεχίζεται.Ο 20χρονος Νορβηγός στράικερ πέτυχε δύο γκολ μεσοβδόμαδα στο 3-2 της Μπορούσια μέσα στο «Σάντσεθ Πιθχουάν» επί της Σεβίλης, στον πρώτο μεταξύ τους αγώνα των «16» του Champions League και σήμερα (20/02) συνέχισε στον ίδιο ρυθμό και στο ντέρμπι του Ρουρ με την Σάλκε. Η Μπορούσια διέλυσε με 4-0 τους «βασιλικούς μπλε», με τον νεαρό σταρ της Ντόρτμουντ να σκοράρει δύο φορές (45΄, 79΄) και να την οδηγεί στην πρώτη της νίκη μετά από τρία ανεπιτυχή αποτελέσματα στην Bundesliga και κρατώντας την σε τροχιά… Champions League. Παράλληλα, έφτασε τα 35 γκολ στην καριέρα του στο γερμανικό πρωτάθλημα, όντας ο νεότερος παίκτης που φτάνει αυτόν τον αριθμό στην ιστορία της λίγκας. Συνοπτικά τα αποτελέσματα και οι σκόρερ και η βαθμολογία: Αρμίνια Μπίλεφελντ-Βόλφσμπουργκ 0-3 (29΄,47΄ Στέφεν, 55΄ Αρνολντ) Γκλάντμπαχ-Μάιντς 1-2 (26′ Στιντλ-10′ Ονισίβο, 86′ Στέγκερ) Φράιμπουργκ-Ουνιόν Βερολίνου 0-1 (64′ Προμέλ) Αϊντραχτ Φρανκφούρτης-Μπάγερν 2-1 (12′ Καμάντα, 31′ Γιουνές-53′ Λεβαντόφσκι) Κολωνία-Στουτγκάρδη 0-1 (49′ Κάλαϊντζιτς) Σάλκε-Ντόρτμουντ 0-4 (42′ Σάντσο, 45′, 79′ Χάλαντ, 60′ Γκερέιρο)
');
}
},
error: function() {
// Fallback to admin-ajax if REST API fails
$.ajax({
url: 'https://www.xtesini.gr/wp-admin/admin-ajax.php',
type: 'POST',
data: {
action: 'get_recommendations_carousel',
limit: limit,
nonce: 'ca241b5fa7'
},
success: function(response) {
if (response.success && response.data.html) {
container.html(response.data.html);
initializeCarousel($('#carousel_684d947b8ad27'));
} else {
container.html('
');
}
}
});
}
});
// Carousel initialization function
function initializeCarousel($wrapper) {
var $container = $wrapper.find(".carousel-container");
var $carousel = $wrapper.find(".related-articles-carousel");
var $items = $wrapper.find(".carousel-item");
var $prevBtn = $wrapper.find(".prev-arrow");
var $nextBtn = $wrapper.find(".next-arrow");
if ($items.length === 0) return;
var itemWidth = $items.first().outerWidth(true);
var visibleItems = Math.floor($container.parent().width() / itemWidth);
var position = 0;
var maxPosition = Math.max(0, $items.length - visibleItems);
// Touch handling variables
var isDragging = false;
var startX = 0;
var startY = 0;
var currentX = 0;
var currentTranslate = 0;
var startTranslate = 0;
var threshold = 10;
var isScrolling = null;
// Hide prev button initially
$prevBtn.css("opacity", "0.5");
// Navigation
$nextBtn.click(function() {
if (position < maxPosition) {
position++;
updatePosition();
}
});
$prevBtn.click(function() {
if (position > 0) {
position--;
updatePosition();
}
});
// Touch support
$carousel.on("touchstart", function(e) {
var touch = e.originalEvent.touches[0];
startX = touch.clientX;
startY = touch.clientY;
isDragging = true;
isScrolling = null;
var transform = $container.css("transform");
var matrix = transform.replace(/[^0-9,.\-]/g, "").split(",");
startTranslate = currentTranslate = matrix[4] ? parseInt(matrix[4]) : 0;
$container.css("transition", "none");
});
$carousel.on("touchmove", function(e) {
if (!isDragging) return;
var touch = e.originalEvent.touches[0];
var deltaX = touch.clientX - startX;
var deltaY = touch.clientY - startY;
if (isScrolling === null) {
if (Math.abs(deltaX) > threshold || Math.abs(deltaY) > threshold) {
isScrolling = Math.abs(deltaY) > Math.abs(deltaX) * 0.7;
}
}
if (isScrolling === true) {
isDragging = false;
$container.css("transition", "transform 0.3s ease");
return;
}
if (isScrolling === false) {
e.preventDefault();
currentX = deltaX;
var newTranslate = startTranslate + deltaX;
var minTranslate = -maxPosition * itemWidth;
var maxTranslate = 0;
if (newTranslate > maxTranslate) {
newTranslate = maxTranslate + (newTranslate - maxTranslate) * 0.3;
} else if (newTranslate < minTranslate) {
newTranslate = minTranslate + (newTranslate - minTranslate) * 0.3;
}
$container.css("transform", "translateX(" + newTranslate + "px)");
}
});
$carousel.on("touchend", function(e) {
if (!isDragging || isScrolling === true) return;
isDragging = false;
$container.css("transition", "transform 0.3s ease");
var prevPosition = position;
if (Math.abs(currentX) > itemWidth * 0.25) {
if (currentX > 0 && position > 0) {
position--;
} else if (currentX < 0 && position < maxPosition) {
position++;
}
}
if (position !== prevPosition && window.RecommendationTracker) {
var action = position > prevPosition ? 'next' : 'prev';
window.RecommendationTracker.trackCarouselInteraction(action);
}
updatePosition();
isScrolling = null;
currentX = 0;
});
function updatePosition() {
var translateX = -position * itemWidth;
currentTranslate = translateX;
$container.css({
"transition": "transform 0.3s ease",
"transform": "translateX(" + translateX + "px)"
});
$prevBtn.css("opacity", position <= 0 ? "0.5" : "1");
$nextBtn.css("opacity", position >= maxPosition ? "0.5" : "1");
}
// Responsive
$(window).on("resize", function() {
itemWidth = $items.first().outerWidth(true);
visibleItems = Math.floor($container.parent().width() / itemWidth);
maxPosition = Math.max(0, $items.length - visibleItems);
if (position > maxPosition) {
position = maxPosition;
}
updatePosition();
});
updatePosition();
}
});