Внешний интерфейс: использование html+css+js для имитации эффекта увеличения области изображения продукта на JD.com.

вставьте сюда описание изображения

Внешний интерфейс: использование html+css+js для имитации эффекта увеличения области изображения продукта на JD.com.

1. Введение

Недавно, просматривая продукты на JD.com на веб-странице, я почувствовал, что специальные эффекты, реализованные на приведенном выше gif-изображении, были хорошими, поэтому я планировал использовать технологию html+css+js для реализации указанных выше специальных эффектов. эффект следующий:

вставьте сюда описание изображения

2. Внешний интерфейс

В основном он использует такие знания, как плавающее, абсолютное позиционирование и относительное позиционирование.Читатели, которые не понимают эту часть знаний, могут сначала понять ее, а затем прочитать этот пост в блоге редактора. В начале реализации было много проблем.Наконец, рассмотрите возможность установки атрибута фонового изображения вместо непосредственного использования тега img. Мы знаем, что когда ширина и высота блока меньше размера его фонового изображения, будет отображаться только часть его фонового изображения.Если значение атрибута background -position не установлено , по умолчанию отображаемая часть изображения левый верхний угол фонового изображения. Пожалуйста, добавьте описание изображения
Среди них поля со значениями атрибутов класса small_img и big_img установлены на плавание влево, а small_img настроено на позиционирование как относительное позиционирование, а для отображения big_img установлено значение none (по умолчанию оно не отображается, и это отображается только при перемещении мыши в область изображения); атрибут класса Поле со значением «другое» устанавливается в абсолютное позиционирование, а его свойство отображения имеет значение «нет» (по умолчанию оно не отображается и отображается только при мышь перемещается в область изображения).
Пожалуйста, добавьте описание изображения

3. js для достижения эффекта движения мыши

Учитывая, что когда мышь перемещается в область изображения, мышь находится в центре другого поля Только когда положение мыши находится на краю области изображения, мышь не находится в центре другого поля. В некоторых случаях он находится в центре другого поля По этой причине мышь находится в small_img Положение поля используется для вынесения ряда суждений следующим образом
Пожалуйста, добавьте описание изображения
: на фоновом изображении small_img (и ширина, и высота 450 пикселей) и фоновом изображении big_img (и ширина, и высота 800 пикселей), хотя был сделан ряд суждений, но все еще есть некоторые случаи, когда суждение не будет Например, в крайнем случае, mouseX может соответствовать требованиям, но mouseY может не соответствовать условиям.Для этого начального условия x=mouseX, y=mouseY.

4. Реализуйте код

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>京东商城图片</title>
    <style type="text/css">
        *{
      
      
            margin: 0;
            padding: 0;
        }
        .main{
      
      
            width: 900px;
            height: 450px;
            margin: 20px auto;
        }

        .main >div{
      
      
            width: 450px;
            height: 450px;
            z-index: 2;
            float: left;
        }
        .small_img{
      
      
            background-image: url('https://img10.360buyimg.com/n1/s450x450_jfs/t1/211447/30/24860/68358/62e8fa30Ed16f2c10/3897f1eb3281d4cd.jpg');
            position: relative;
        }
        .big_img{
      
      
            display: none;
            width: 400px !important;
            height: 400px !important;
            background-image: url('https://img10.360buyimg.com//n0/jfs/t1/211447/30/24860/68358/62e8fa30Ed16f2c10/3897f1eb3281d4cd.jpg');
            background-repeat: no-repeat;
        }

        .other{
      
      
            width: 225px;
            height: 225px;
            background-color: rgba(1, 1, 1, 0.2);
            z-index: 3;
            position: absolute;
            cursor: move;
            display: none;
        }
    </style>
</head>
<body>
    <div class="main">
        <div class="small_img">
            <div class="other">
            
            </div>
        </div>
        <div class="big_img">
        
        </div>
    </div>
</body>
<script type="text/javascript">
    const small_img = document.querySelector('.small_img');
    const other = document.querySelector('.other');
    const big_img = document.querySelector('.big_img');
    const a = 800 / 450 ;

    small_img.onmouseover = ()=>{
      
      
        other.style.display = 'block';
        big_img.style.display = 'block';

        small_img.onmousemove = (e) => {
      
      
            let mouseX = e.clientX - small_img.getBoundingClientRect().left;
            let mouseY = e.clientY - small_img.getBoundingClientRect().top;

            let x = mouseX,y = mouseX;
            if (mouseX < 112.5)
                x = 0;

            if (mouseY < 112.5)
               y = 0;

            if (mouseX > 450 - 112.5)
                x = 225 + 'px';

            if (mouseY > 450 - 112.5)
                y = 225 + 'px';

            if (mouseX >= 112.5 && mouseX <= 450 - 112.5)
                x = mouseX - 112.5 + 'px';

            if (mouseY >= 112.5 && mouseY <= 450 - 112.5)
                y = mouseY - 112.5 + 'px';
            
            other.style.left = parseFloat(x) + 'px';
            other.style.top = parseFloat(y) + 'px';


            big_img.style.backgroundPosition = `-${ 
        parseFloat(x) * a}px -${ 
        parseFloat(y) * a}px`;
        }
    }
    

    small_img.onmouseout = () => {
      
      
        other.style.display = 'none';
        big_img.style.display = 'none';
    }
    
</script>
</html>

Supongo que te gusta

Origin blog.csdn.net/qq_45404396/article/details/131716686
Recomendado
Clasificación