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 ув.Данил
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.
Order description: We are looking for an experienced frontend developer/OpenCart specialist to optimize the loading speed of the website (categories and product cards) according to Google Core Web Vitals requirements. About the project: * CMS: OpenCart. * Specifics: The site operates in catalog mode (no cart or checkout). * Volume: 2900 items. * Server part: Already optimized (runs on OpenLiteSpeed). * Stack: Work is done exclusively with the template code, modifiers, and frontend. No work with the database. What needs to be done (Technical task): 1. Delayed loading of scripts (Delay JS): * Problem: Third-party analytics scripts (GTM, Google Tag) block the main thread on mobile devices for about 4.3 seconds. * Task: Set up delayed execution of these scripts. The scripts should activate strictly on the first user action (first scroll, tap on the screen, or mouse movement). * Important: Data collection, analytics, and ad functionality must remain intact. 2. Fixing the CLS metric (Layout Stability): * Problem: The page "jumps" and shifts during image loading. * Task: In the style files or theme template, hardcode the HTML attributes width and height for all product images in the catalog (listings) and product cards. * Goal: Reserve space for images in the DOM tree until they are actually loaded to prevent content shifting. Ensure that responsiveness (CSS) is not broken. 3. Optimization of the critical path (LCP): * Task: Add the fetchpriority="high" tag for the main product image on the first screen. This will instruct the browser to load the main product photo as a priority. Requirements for the performer and acceptance conditions: 1. No unnecessary modules: Work is performed with clean code/modifiers, without installing additional third-party or paid optimization plugins. 2. Security and layout: You are fully responsible for the layout. After making changes, the visual display of the site on mobile and PC, as well as functionality (filters, photo switching in the gallery, menu) must remain unchanged. 3. Criteria for job submission (DoD): Provide a screenshot and a link to a live test report from Google PageSpeed Insights (for the mobile version). The performance score must be no lower than 75 points, and the CLS metric must be no more than 0.1 (in the green zone). Changes must be made strictly through modifiers (OCMOD) or a copy of the theme to avoid overwriting core updates. In your response, please indicate: 1. Have you had experience configuring Delay JS specifically for GTM on OpenCart? 2. The estimated time for task completion. 3. The cost of the work.