Как установить изображение на фон текста с эффектом параллакса

Я пытаюсь добиться эффекта для фона текста как изображения. Изображение должно быть с эффектом параллакса.

Я попробовал код ниже, но не смог работать так, как хочу. Пожалуйста, предложите лучшее решение с помощью CSS / JS, в зависимости от того, что лучше для этого случая.

Есть ли какие-либо альтернативы для этого или какие-либо трюки, которые я даже пробовал маскировать, но не достигли цели.

Код ниже

let mouseX, mouseY, trackX, trackY;

document.addEventListener("wheel", function (e) {
    mouseX = e.pageX;
    mouseY = e.pageY;
    trackX = (4 * mouseX / 170) + 40;
    trackY = (4 * mouseY / 170) + 50;
    document.querySelector(".title").style.backgroundPosition = `${trackX}% ${trackY}%`
});
* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
}

html,
body {
    width: 100%;
    height: 200vmin;
    font-size: 100%;
    font-family: 'Anton', sans-serif;
}

body {
    background: #1e5abc;
}

.hero {
    background: linear-gradient(rgb(235, 236, 231), rgb(255, 255, 255));
    height: 100vh;
    width: 100%;
    display: flex;
    flex-wrap: wrap;
    position: relative;
    clip-path: polygon(0% 0%, 100% 0%, 100% 85%, 50% 100%, 0% 85%, 0% 0%);

}

.container {
    flex: 1 1 50%;
    display: flex;
    justify-content: center;
    align-items: center;
}

.right-side-container {
    flex: 1 1 50%;
    clip-path: url(#clipPath);
}

.title {
    background: url("https://images.unsplash.com/photo-1470813740244-df37b8c1edcb?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=2b76b1e6da83c1a0f59eebaa481e12aa&auto=format&fit=crop&w=751&q=80") center no-repeat;
    background-position: 40% 50%;
    -webkit-background-clip: text;
    color: transparent;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    line-height: 1.3em;
    text-anchor: middle;
    alignment-baseline: hanging;
    font-size: calc(12px + 6.2vw);
    text-align: center;
}

.subtitle {
    text-align: center;
    letter-spacing: 0.35em;
    font-size: 1.5vw;
    color: #2b2b2b;
}

img {
    height: 100%;
    width: 100%;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "hero">
     <div class = "container">
        <div class = "header-container">
            <br><br><br>
            <br><br><br>
            <div class = "title">
                I'm Travis.<br>
                Developer.
            </div>
            <div class = "subtitle">
                <p>Frontend - backend - everything</p>
            </div>
        </div>
    </div>
    <div class = "right-side-container">
   
    </div>
</div>

Я пробую изображение параллакса как текстовый цвет BG, а не полное изображение раздела параллакса.

Mahesh Thorat 17.04.2023 11:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

window.addEventListener('scroll', function() {
  let offset = window.pageYOffset;
  document.querySelector('.title').style.backgroundPositionY = offset * 0.7 + 'px';
});
.title {
  background-image: url('https://cdn.firstcry.com/education/2022/04/25155522/1378635314.jpg');
  background-size: cover;
  background-attachment: fixed;
  height: 100vh;
  overflow-x: hidden;
  overflow-y: auto;
  background-repeat: no-repeat;
}

.title-text {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
  text-align: center;
  color: white;
  padding: 10px;
}
<div class = "title">
  <div class = "title-text">
    <h1>I'm Travis</h1>
    <h2>
    The developer
    </h2>
  </div>
</div>

поместите эту строку в css

.title{
background-attachment: fixed;
}

На самом деле, Низал, моя демонстрация не идеальна, когда я делаю так, чтобы она работала с несколькими итерациями. И просто изменить css здесь не получится. Я ищу лучшую альтернативу для него или исправление проблемы.

Mahesh Thorat 17.04.2023 11:29

Я пытаюсь добавить цвет текста в качестве фонового изображения, и он будет параллаксировать при прокрутке страницы. Вы поняли мою точку зрения, если нет, пожалуйста, дайте мне знать. Спасибо за участие, чтобы найти что-то новое.

Mahesh Thorat 20.04.2023 11:25
Ответ принят как подходящий

let mouseX, mouseY, trackX, trackY;

document.addEventListener("wheel", function (e) {
    mouseX = e.pageX;
    mouseY = e.pageY;
    trackX = (4 * mouseX / 170) + 40;
    trackY = (4 * mouseY / 170) + 50;
    document.querySelector(".title").style.backgroundPosition = `${trackX}% ${trackY}%`
});
* {
    padding: 0;
    margin: 0;
    box-sizing: border-box;
}

html,
body {
    width: 100%;
    height: 200vmin;
    font-size: 100%;
    font-family: 'Anton', sans-serif;
}

body {
    background: #1e5abc;
}

.hero {
    background: linear-gradient(rgb(235, 236, 231), rgb(255, 255, 255));
    height: 100vh;
    width: 100%;
    display: flex;
    flex-wrap: wrap;
    position: relative;
    clip-path: polygon(0% 0%, 100% 0%, 100% 85%, 50% 100%, 0% 85%, 0% 0%);

}

.container {
    flex: 1 1 50%;
    display: flex;
    justify-content: center;
    align-items: center;
}

.right-side-container {
    flex: 1 1 50%;
    clip-path: url(#clipPath);
}

.title {
    background: url("https://images.unsplash.com/photo-1470813740244-df37b8c1edcb?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=2b76b1e6da83c1a0f59eebaa481e12aa&auto=format&fit=crop&w=751&q=80") center no-repeat;
    background-position: 40% 50%;
    -webkit-background-clip: text;
    color: transparent;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    line-height: 1.3em;
    text-anchor: middle;
    alignment-baseline: hanging;
    font-size: calc(12px + 6.2vw);
    text-align: center;
    background-attachment: fixed;
}

.subtitle {
    text-align: center;
    letter-spacing: 0.35em;
    font-size: 1.5vw;
    color: #2b2b2b;
}

img {
    height: 100%;
    width: 100%;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "hero">
     <div class = "container">
        <div class = "header-container">
            <br><br><br>
            <br><br><br>
            <div class = "title">
                I'm Travis.<br>
                Developer.
            </div>
            <div class = "subtitle">
                <p>Frontend - backend - everything</p>
            </div>
        </div>
    </div>
    <div class = "right-side-container">
   
    </div>
</div>

Пожалуйста, дайте мне знать, что это то, что вы ищете

Правильно background-attachment: fixed; после добавления это сработало отлично. Цените свою работу. Спасибо!

Mahesh Thorat 26.04.2023 03:50

Другие вопросы по теме