Budget: 500 UAH Deadline: 1 day
Сделаю
= -= =- =- =- =- =- =- =- =- = -= -= - =-= -=- = -= -= -= -= -= -=- =- =-
Не переходит по указанным ссылкам в слайдере, нужно чтобы при клике на ссылку переходили.
| <div class="container"> | |
| <div class="slider"> | |
| <div class="slider__wrapper"> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="https://happy-travel.kz/upload/userfiles/images/osobennosti-otdykha-v-period-ramadan.jpg" title="Особенности отдыха в период Рамадана в ОАЭ, Турция, Египет, Тунис" alt="Особенности отдыха в период Рамадана" > | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="https://happy-travel.kz/article/osobennosti-otdykha-v-period-ramadan.php">Особенности отдыха в период Рамадана</a></p> | |
| </div> | |
| </div> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="https://happy-travel.kz/i/dubai-food-uae.jpg" title="Сколько стоит покушать в Дубаи за пределами отеля" alt="Цены на еду в Дубае" > | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="/uae/skolko-stoit-pokushat-v-dubai-za-predelami-otelya.php">Сколько стоит поесть в ОАЭ вне отеля</a></p> | |
| </div> | |
| </div> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="/i/festival-tyulpanov-stambul.jpg" Title="Стамбульский Фестиваль Тюльпанов" alt="Фестиваль Тюльпанов"> | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="https://happy-travel.kz/turkey/festival_tyulpanov.php">Фестиваль Тюльпанов</a></p> | |
| </div> | |
| </div> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="https://happy-travel.kz/i/paris.jpg" Title="6 топ-мест к посещению во Франции" alt="Самые значимые места во Франции"> | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="https://happy-travel.kz/france/index.php">6 топ-мест к посещению во Франции </a></p> | |
| </div> | |
| </div> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="https://happy-travel.kz/i/luchshie-semeynye-oteli-v-turtsii.jpg" Title="Лучшие отелей для семейного отдыха в Турции" alt="Топ-10 отелей для семейного отдыха в Турции"> | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="https://happy-travel.kz/turkey/top-10-family-hotels.php">Топ-10 семейных отелей Турции</a></p> | |
| </div> | |
| </div> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="https://happy-travel.kz/i/top10-molodejnyh-otelei-turcii.jpg" Title="Топ-10 отели Турции для молодежи 2019" alt="Топ-10 молодежных отелей Турции"> | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="https://happy-travel.kz/turkey/top10hotels.php">Топ-10 молодежных отелей Турции</a></p> | |
| </div> | |
| </div> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="https://happy-travel.kz/i/turkey-kappadokiya.jpg" Title="Туры в Каппадокию из Алматы" alt="Туры в Каппадокию"> | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="https://happy-travel.kz/turkey/%D0%BA%D0%B0%D0%BF%D0%BF%D0%B0%D0%B4%D0%BE%D0%BA%D0%B8%D1%8F.php">Туры в Каппадокию</a></p> | |
| </div> | |
| </div> | |
| <div class="slider__item"> | |
| <div class="slider__content"> | |
| <div class="slider__content_header"> | |
| <img class="slider__content_img" src="/i/10-poleznyh-prilozhenija-dlja-puteshestvij.jpg" Title="10 самых полезных приложений для путешественников" alt="10 полезных приложений для путешественников"> | |
| </div> | |
| <p class="slider__content_title"><a class="sl" href="/ru/sovety/apps.php">10 полезных приложений для путешественников</a></p> | |
| </div> | |
| </div> | |
| </div> | |
| <a class="slider__control slider__control_left" role="button"></a> | |
| <a class="slider__control slider__control_right" role="button"></a> | |
| </div> | |
| </div> | |
<script> 'use strict';
var multiItemSlider = (function () {
function _isElementVisible(element) {
var rect = element.getBoundingClientRect(),
vWidth = window.innerWidth || doc.documentElement.clientWidth,
vHeight = window.innerHeight || doc.documentElement.clientHeight,
elemFromPoint = function (x, y) { return document.elementFromPoint(x, y) };
if (rect.right < 0 || rect.bottom < 0
|| rect.left > vWidth || rect.top > vHeight)
return false;
return (
element.contains(elemFromPoint(rect.left, rect.top))
|| element.contains(elemFromPoint(rect.right, rect.top))
|| element.contains(elemFromPoint(rect.right, rect.bottom))
|| element.contains(elemFromPoint(rect.left, rect.bottom))
);
}
return function (selector, config) {
var
_mainElement = document.querySelector(selector),
_sliderWrapper = _mainElement.querySelector('.slider__wrapper'),
_sliderItems = _mainElement.querySelectorAll('.slider__item'),
_sliderControls = _mainElement.querySelectorAll('.slider__control'),
_sliderControlLeft = _mainElement.querySelector('.slider__control_left'),
_sliderControlRight = _mainElement.querySelector('.slider__control_right'),
_wrapperWidth = parseFloat(getComputedStyle(_sliderWrapper).width),
_itemWidth = parseFloat(getComputedStyle(_sliderItems[0]).width),
_html = _mainElement.innerHTML,
_positionLeftItem = 0,
_transform = 0,
_step = _itemWidth / _wrapperWidth * 100,
_items = [],
_interval = 0,
_states = [
{ active: false, minWidth: 0, count: 1 },
{ active: false, minWidth: 576, count: 2 },
{ active: false, minWidth: 992, count: 3 },
{ active: false, minWidth: 1200, count: 4 },
],
_config = {
isCycling: false,
direction: 'right',
interval: 5000,
pause: true
};
for (var key in config) {
if (key in _config) {
_config[key] = config[key];
}
}
_sliderItems.forEach(function (item, index) {
_items.push({ item: item, position: index, transform: 0 });
});
var _setActive = function () {
var _index = 0;
var width = parseFloat(document.body.clientWidth);
_states.forEach(function (item, index, arr) {
_states[index].active = false;
if (width >= _states[index].minWidth)
_index = index;
});
_states[_index].active = true;
}
var _getActive = function () {
var _index;
_states.forEach(function (item, index, arr) {
if (_states[index].active) {
_index = index;
}
});
return _index;
}
var position = {
getItemMin: function () {
var indexItem = 0;
_items.forEach(function (item, index) {
if (item.position < _items[indexItem].position) {
indexItem = index;
}
});
return indexItem;
},
getItemMax: function () {
var indexItem = 0;
_items.forEach(function (item, index) {
if (item.position > _items[indexItem].position) {
indexItem = index;
}
});
return indexItem;
},
getMin: function () {
return _items[position.getItemMin()].position;
},
getMax: function () {
return _items[position.getItemMax()].position;
}
}
var _transformItem = function (direction) {
var nextItem;
if (!_isElementVisible(_mainElement)) {
return;
}
if (direction === 'right') {
_positionLeftItem++;
if ((_positionLeftItem + _wrapperWidth / _itemWidth - 1) > position.getMax()) {
nextItem = position.getItemMin();
_items[nextItem].position = position.getMax() + 1;
_items[nextItem].transform += _items.length * 100;
_items[nextItem].item.style.transform = 'translateX(' + _items[nextItem].transform + '%)';
}
_transform -= _step;
}
if (direction === 'left') {
_positionLeftItem--;
if (_positionLeftItem < position.getMin()) {
nextItem = position.getItemMax();
_items[nextItem].position = position.getMin() - 1;
_items[nextItem].transform -= _items.length * 100;
_items[nextItem].item.style.transform = 'translateX(' + _items[nextItem].transform + '%)';
}
_transform += _step;
}
_sliderWrapper.style.transform = 'translateX(' + _transform + '%)';
}
var _cycle = function (direction) {
if (!_config.isCycling) {
return;
}
_interval = setInterval(function () {
_transformItem(direction);
}, _config.interval);
}
var _controlClick = function (e) {
e.preventDefault();
if (e.target.classList.contains('slider__control')) {
var direction = e.target.classList.contains('slider__control_right') ? 'right' : 'left';
_transformItem(direction);
clearInterval(_interval);
_cycle(_config.direction);
}
};
var _handleVisibilityChange = function () {
if (document.visibilityState === "hidden") {
clearInterval(_interval);
} else {
clearInterval(_interval);
_cycle(_config.direction);
}
}
var _refresh = function () {
clearInterval(_interval);
_mainElement.innerHTML = _html;
_sliderWrapper = _mainElement.querySelector('.slider__wrapper');
_sliderItems = _mainElement.querySelectorAll('.slider__item');
_sliderControls = _mainElement.querySelectorAll('.slider__control');
_sliderControlLeft = _mainElement.querySelector('.slider__control_left');
_sliderControlRight = _mainElement.querySelector('.slider__control_right');
_wrapperWidth = parseFloat(getComputedStyle(_sliderWrapper).width);
_itemWidth = parseFloat(getComputedStyle(_sliderItems[0]).width);
_positionLeftItem = 0;
_transform = 0;
_step = _itemWidth / _wrapperWidth * 100;
_items = [];
_sliderItems.forEach(function (item, index) {
_items.push({ item: item, position: index, transform: 0 });
});
}
var _setUpListeners = function () {
_mainElement.addEventListener('click', _controlClick);
if (_config.pause && _config.isCycling) {
_mainElement.addEventListener('mouseenter', function () {
clearInterval(_interval);
});
_mainElement.addEventListener('mouseleave', function () {
clearInterval(_interval);
_cycle(_config.direction);
});
}
document.addEventListener('visibilitychange', _handleVisibilityChange, false);
window.addEventListener('resize', function () {
var
_index = 0,
width = parseFloat(document.body.clientWidth);
_states.forEach(function (item, index, arr) {
if (width >= _states[index].minWidth)
_index = index;
});
if (_index !== _getActive()) {
_setActive();
_refresh();
}
});
}
// инициализация
_setUpListeners();
if (document.visibilityState === "visible") {
_cycle(_config.direction);
}
_setActive();
return {
right: function () {
_transformItem('right');
},
left: function () {
_transformItem('left');
},
stop: function () {
_config.isCycling = false;
clearInterval(_interval);
},
cycle: function () {
_config.isCycling = true;
clearInterval(_interval);
_cycle();
}
}
}
}());
var slider = multiItemSlider('.slider', {
isCycling: true
})</script><style> /*! * chiefSlider (https://itchief.ru/lessons/php/feedback-form-for-website) * Copyright 2018 Alexander Maltsev * Licensed under MIT (https://github.com/itchief/feedback-form/blob/master/LICENSE) */ *, *::before, *::after { box-sizing: border-box; } body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; color: #fff; } .slider { position: relative; overflow: hidden; max-width: 1600px; margin: 0 auto; padding-left: 40px; padding-right: 40px; } .slider__wrapper { display: flex; transition: transform 0.6s ease; } .slider__item { flex: 0 0 100%; max-width: 100%; padding-left: 10px; padding-right: 10px; } @media (min-width: 576px) { .slider__item { flex: 0 0 50%; max-width: 50%; } } @media (min-width: 992px) { .slider__item { flex: 0 0 33.333333%; max-width: 33.333333%; } } @media (min-width: 1200px) { .slider__item { flex: 0 0 25%; max-width: 25%; } } .slider__control { position: absolute; top: 0; display: flex; align-items: center; justify-content: center; width: 50px; color: #fff; text-align: center; bottom: 0; background: #fff; } .slider__control:hover, .slider__control:focus { color: #fff; text-decoration: none; outline: 0; } .slider__control_left { left: 0; } .slider__control_right { right: 0; } .slider__control::before { content: ''; display: inline-block; width: 20px; height: 20px; background: transparent no-repeat center center; background-size: 100% 100%; } .slider__control_left::before { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23424242' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); } .slider__control_right::before { background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23424242' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); } .slider__content_header { position: relative; } .slider__content_img { display: block; height: auto; max-width: 100%; } .slider__content_section { position: absolute; bottom: 0; left: 0; background: #009688; color: #fff; padding: 4px 8px; } .slider__content_title { background: #f5f5f5; color: #424242; white-space: normal; font-weight: 700; font-size: 20px; line-height: 1.3; padding: 10px 15px; margin: 0; height: 52px; } .slider__content_footer { background: #f5f5f5; display: flex; padding: 20px 15px; color: #616161; } .slider__content_avatar { flex: 0 0 40px; max-width: 40px; } .slider__content_photo { display: block; height: auto; max-width: 100%; border-radius: 50%; } .slider__content_author { margin-left: 8px; line-height: 40px; } .slider__content_icon { height: 18px; margin-top: 12px; margin-left: auto; } .slider__content_views { margin-left: 4px; line-height: 40px; } </style> |
Budget: 500 UAH Deadline: 1 day
Сделаю
= -= =- =- =- =- =- =- =- =- = -= -= - =-= -=- = -= -= -= -= -= -=- =- =-
Budget: 200 UAH Deadline: 1 day
Привет выполню сейчас
понял в чем проблема
@HacerTo118
c ув.Данил
I have some logic in Google Excel related to the integration with the Nova Poshta API and the Turbosms API. Overall, everything works fine, but some functionality needs to be added. All details will be discussed in correspondence. I will provide access to the Excel and the code. It is essential for the performer to have experience working with Google Excel JS in Apps Script.
Hello everyone, we need to create a website for event creation and ticket sales. Possible options include using a ready-made template, a framework, or your own solution. It is preferable that you have experience in developing websites for ticket sales. We will send examples of websites in private messages. If necessary, we will create a prototype. If you have previously worked on similar websites, please send examples in private messages. We will discuss the details in private messages. Thank you and have a great day!
What we are calculating in the project: Realized PnL, ROI, and Win Rate for cryptocurrency wallets - how profitable the wallet traded a certain token over the selected period. Based on what data: the history of on-chain transactions of the wallet (swaps, token transfers) + the market price of the token at the time of each transaction. The main data source is Moralis: two calls during the initial loading of the wallet - native ETH transfers and all ERC-20 token transfers. What we are comparing with: Nansen.io - we take it as a benchmark, comparing our calculated metrics with what Nansen shows for the same wallets over the same period. Problem: our figures significantly differ from Nansen, and we do not fully understand the rules by which some actions of the wallet should be classified for PnL purposes. We need to fix the calculation of Realized PnL, ROI, and Win Rate to match Nansen. In your application, please write: - experience with similar tasks - experience with Nansen - experience with Moralis - experience with DeFiLlama - experience with articles on crypto transactions - approximate cost and timeline for the fix
The site is built on the Next.js framework (based on React). All points in the technical specification need to be completed. The technical specification is attached in the file. I look forward to your proposals.
Website for evaluation: https://copy.eurobrands-shop.de/ Task: fix frontend bugs at the Magento 2 / Amasty theme level: CSS/LESS/JS, mobile, RTL, minicart, language dropdown, layout shift/CLS. Work format: - without local Magento deployment; - work through DevTools + theme source files; - edits in CSS/LESS/JS/template files of the theme; - result: diff / commit / archive of changed files; - deployment and assembly on our side; - work through a secure deal; - NDA until the transfer of source files/accesses. What needs to be checked and evaluated: 1. RTL / Arabic version: - phone in the header is displayed incorrectly; - element offsets in header, minicart, wishlist/account, product page; - margins, direction, unicode-bidi, positioning. 2. Header: - language dropdown; - cart/wishlist; - hit-area of icons. 3. Minicart: - opens unstably on some pages; - check Console / Network / Event Listeners / customer-data / z-index / overlay. 4. Mobile: - cart/wishlist badges are too large; - Categories block is compressed/cut off; - mobile menu / Menu-Account. 5. Product page: - layout shift / CLS of images; - Add to Cart / Quantity / BOX / PALLET in RTL. 6. Wishlist/account: - /wishlist/ - /mwishlist/ - tabs, Back button, overflow of counters. Problematic URLs: - https://copy.eurobrands-shop.de/alpro - https://copy.eurobrands-shop.de/producers - https://copy.eurobrands-shop.de/wishlist/ - https://copy.eurobrands-shop.de/mwishlist/ In your response, please write: 1. Do you have experience with Magento 2 frontend? 2. Do you have experience with RTL? 3. How many hours do you need for the first stage? 4. What is the cost? 5. When can you start? 6. What accesses do you need? 7. Are you ready to work through a secure deal and sign an NDA? Important: a specific result is needed — corrections or a technical explanation for each point: fixed / not reproducible / not a frontend issue.