RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 923630
Accepted
Aleksandr Krais
Aleksandr Krais
Asked:2020-12-21 12:36:48 +0000 UTC2020-12-21 12:36:48 +0000 UTC 2020-12-21 12:36:48 +0000 UTC

如何重复这个css效果?

  • 772

告诉我,我怎样才能像这个视频一样重复块外观的效果?

目前我有这样的事情。

外观是通过 clip-path 属性实现的。我想不出复制溶解效果的方法。

当您单击缩略图时,滑块本身会打开部分,而不仅仅是图片。那些。你戳一个缩影,里面有一段内容。

这是使用的图像

这是我的 HTML

 <body>
<div class="men-block">
    <img src="img/slider/men.png" alt="#">
</div>
<div class="wrapper" id="content">
    <div class="wrap" id="slider">
        <div class="images">
            <div class="pict">
                <div class="list" style="background-image: url(img/slider/1.jpg); background-position: top center; background-size: cover;" id="_0"></div>
            </div>
            <div class="pict">
                <div class="list" style="background-image: url(img/slider/2.jpg); background-position: top center; background-size: cover;" id="_1"></div>
            </div>
            <div class="pict">
                <div class="list" style="background-image: url(img/slider/3.jpg); background-position: top center; background-size: cover;" id="_2"></div>
            </div>
            <div class="pict">
                <div class="list" style="background-image: url(img/slider/1.jpg); background-position: top center; background-size: cover;" id="_3"></div>
            </div>
        </div>
    </div>
    <!-- /.wrap -->
</div>
<!-- /.wrapper -->


<div class="sections">
    <section class="item open" id="one" data-bg="url(img/slider/1.jpg)" data-id="_0"></section>
    <!-- /.one -->
    <section class="item close sec" data-bg="url(img/slider/2.jpg)" data-id="_1">

    </section>
    <!-- /.one -->
    <section class="item close sec" data-bg="url(img/slider/3.jpg)" data-id="_2"></section>
    <!-- /.one -->
    <section class="item close sec" data-bg="url(img/slider/1.jpg)" data-id="_3"></section>
    <!-- /.one -->
</div>
<!-- /.sectios -->
</body>

这是我的scss:

    body {
  position: relative;
}

.wrapper {
  z-index: 5;
}

.wrap {
  width: 100%;
}

.item {
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  -webkit-clip-path: circle(13.9% at 50% 50%);
  clip-path: circle(13.9% at 50% 50%);
}

.sec {
  height: 100vh;
  width: 100vw;
  position: absolute;
  top: 0;
}

#one {
  background-image: url(../img/slider/1.jpg);
  height: 100vh;
  -webkit-clip-path: circle(70.9% at 50% 50%);
  clip-path: circle(70.9% at 50% 50%);
}

.close {
  opacity: 0;
  z-index: 1;
}

.shadow{
  box-shadow: 0 0 16px 16px white inset;
  -webkit-border-radius: 20px;
  -moz-border-radius: 20px;
  border-radius: 20px;
}

.sections {
  min-height: 100vh;
  background-size: cover;
  background-position: center;
}

.slider {
  z-index: 10;
  overflow: auto;
  white-space: nowrap;

}

.list {
  display: inline-block;
  margin-left: 8rem;
  margin-right: 8rem;
  width: 30rem;
  height: 35rem;
  border-radius: 1rem;
  opacity: 0.9;

  &:hover {
    cursor: pointer;
  }
}
.men-block {
  position: absolute;
  bottom: -50px;
  left: 30%;
  z-index: 10;
  width: 150px;
  img{
    width: 100%;
  }
}
.cut-wrap{
  position: relative;
  height: 500px;
  margin-top: 200px;
}
#content {
  position: absolute;
  right: -5%;
  top: 22.5%;
  height: 500px;
  width: 1000px;
}

#slider{
  width: 100%;
  height: 100%;
  position: relative;
  overflow:hidden;
  -webkit-transition: transform 1.5s;
  -moz-transition: transform 1.5s;
  -ms-transition: transform 1.5s;
  -o-transition: transform 1.5s;
  transition: transform 1.5s;
}

#slider .left,.right{
  width: 50px;
  height: 50px;
  box-sizing: border-box;
  position: absolute;
  top:40%;
  cursor: pointer;
  border: 1px solid #4d4d4d;
}

#slider .left{
  left: 0;
}

#slider .right{
  right: 0;
}
#slider .left img{
  width: 50px;
  height: 50px;
}
#slider .right img{
  width: 50px;
  height: 50px;
  transform: rotate(180deg);
}
#slider .images .pict{
  float: left;

}
.item{
  &-header{
    display: flex;
    justify-content: space-around;
    align-items: center;
    &__item{
      width: 50px;
      height: 50px;
      background-color: darkviolet;
    }
  }
  &-content{
    display: flex;
    justify-content: center;
    align-items: center;
    flex: 1 0 auto;
    &__item{
      width: 100px;
      height: 100px;
      margin-left: 20px;
      margin-right: 20px;
      background-color: rosybrown;
    }
  }
  &-footer{
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex: 0 0 auto;
    &__item{
      width: 20px;
      height: 60px;
      background-color: yellowgreen;
    }
  }
}

这是我的js:

   function list() {
      const open = $('.list'); /* переменная открывает блок */

      open.on('click', function () {
         /* блок, на который мы тыкнули прячем в конец слайдера */
      $(this).parent().appendTo('.images').fadeOut;

         const parent = $(this); 
         let prevOpen = $('section.open'),
           sectionItem = $('section.item'),
           slider = $('#slider'),
           nextSection = $('[data-id='+parent.attr('id')+']');

         /* Отодвигаем секцию сослайдами через 500мс на 75% по Х при клике на блок open */
         setTimeout(function () {
            slider.css({"transform": "translateX(75%)"});
         }, 600);
         /*Возвращаем секцию в начальное положение*/
         open.mouseenter(function () {
            slider.css({"transform": "translateX(0)"});
         });

         /* делаем я-index меньше, чем у активного, что бы не было проблем с появлением изображений */
         prevOpen.css({
            "z-index": "1"
         });

            /* Ставим ищем нужную секцию по дата атрибуту */
         if ( parent.attr('id') === nextSection.attr('data-id') ) {
            nextSection.removeClass('close').addClass('open ').css({   
               "background-image": nextSection.attr("data-bg")
            });

            /* увеличиваем область видимости для эффекта появления секции */
            nextSection.css({"clip-path": "circle(70.9% at 50% 50%)", "transition" : "clip-path 1.5s"});

            /* прячем слайдер и отодвигаем его вправо */
            let wrapper = $('.wrapper');
            wrapper.css({"opacity" : "0", "transition" : "opacity 0.5s"});
            setTimeout(function () {
               wrapper.css({"opacity" : "1", "transition" : "opacity 1.5s"});
            }, 1500);
         }

         /* добавляем бэкграунд текущего блока обертке, что бы при смене активног элемента у нас не было белого фона */
         $('.sections').css({
            'background-image': prevOpen.attr("data-bg")
         });

         /* Всем секциям, не являющимся открытой мы меняем классы на нужные   */
         sectionItem.not(nextSection).removeClass('open ').addClass('close').css({"clip-path": "circle(7.9% at 50% 50%)", "transition" : "clip-path 3s"});


      });
   }
   list();

   /* Бесконечный слайдер с возможностью прокрутки колесом мыши (на счет тач устройств пока не известно) */
   function cut() {
    const speed = 500;
    let pictW,imgW,n,pict,img,currentM,end=true;
    pict = $('#slider .pict');
    img = $('#slider .images');
    pictW = parseInt(pict.width());
    n = pict.length;
    imgW=(n+1)*pictW;
    img.width(imgW);
    currentM = -pictW;

    /* Меняем слайды колесиком мыши */
    $('#slider').bind({
        mouseenter: function() {
            $(this).on('wheel', (function(e) {
                e.preventDefault();
                if (e.originalEvent.deltaY < 0) {
                    if(end) {
                        end=false;
                        currentM = currentM + pictW;
                        img.animate({
                            marginLeft: currentM
                        }, speed,  function () {
                            end = true;
                            $('.pict').last().prependTo('.images');
                            currentM = currentM - pictW;
                            img.css('marginLeft',currentM);
                        });
                    }
                } else {
                    if(end) {
                        end=false;
                        currentM = currentM - pictW;
                        img.animate({
                            marginLeft: currentM
                        }, speed,  function () {
                            end = true;
                            $('.pict').first().appendTo('.images');
                            currentM = currentM + pictW;
                            img.css('marginLeft',currentM);
                        });
                    }
                }
            }));
        }
    });
}
   cut ();
javascript
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Serhii S.
    2020-01-09T12:47:23Z2020-01-09T12:47:23Z

    当您单击滑块时,下一张图像中的蒙版会根据背景缩放,给人一种淡化的印象。

    为此,您必须创建一个简单的 CSS 掩码作为 png 文件并为其设置动画。

    一个小演示的示例,没有滑块和其余代码。

    代码笔

    setTimeout(function() {
      let animation = document.getElementById('slide1');
      animation.setAttribute("style", "-webkit-mask-size:300%;");
    }, 1000)
    
    setTimeout(function() {
      let animation = document.getElementById('slide1');
    
      animation.setAttribute("style", "-webkit-mask-size:20%;");
    }, 3000)
    * {
      box-sizing: border-box;
    }
    
    html,
    body,
    .wrapper {
      height: 100%;
      margin: 0;
      position: relative;
    }
    
    .men-block {
      position: absolute;
      bottom: -50px;
      left: 30%;
      z-index: 10;
      width: 150px;
    }
    
    .men-block>img {
      width: 100%;
    }
    
    .landscape {
      max-width: 100%;
    }
    
    .landscape.closed {
      position: absolute;
      top: 0;
      /* opacity:0;*/
      -webkit-mask-image: url("https://i.ibb.co/p2vyKt4/mask.png");
      -webkit-mask-repeat: no-repeat;
      -webkit-mask-size: 20%;
      -webkit-mask-position: center;
      transition: all 3s;
    }
    
    .wrapper {
      background: url('https://treehouse-code-samples.s3.amazonaws.com/CSS-DD/codepen/blog/mask-demo-lg.jpg');
      background-repeat: no-repeat;
    }
    <div class="men-block">
      <img src="https://i.ibb.co/Fxfkr1V/men.png" alt="#">
    </div>
    <div>
      <img src="https://i.ibb.co/q0zJBwx/1.jpg" class="landscape" alt="">
      <img src="https://i.ibb.co/rMN0mhk/3.jpg" class="landscape closed" id="slide1" alt="">
    </div>

    Время ожидания не соответствует примеру из-за setTimeout функции, но это должно быть легко настраиваемым. Если Вы хотите решение для всех браузер, нужно не забыть настроить правильные префиксы (в примере префиксы для webkit).

    • 5
  2. Best Answer
    Alexander Lonberg
    2020-01-11T10:37:18Z2020-01-11T10:37:18Z

    Все-таки решил попробовать, только пошел другим путем.

    Все только на масках(mask-image) с градиентами. Zoom не обошелся без mask.png. Так и не пришло ничего в голову - как сделать прямоугольник с градиентом.

    Здесь можно видео взять(или просто посмотреть), а здесь файлы, там только пути переписать надо.

    Собственно на картинке путь, которым пошел: введите сюда описание изображения

    1 - слой основного изображения(именно он меняется, но не сразу)

    1.1 - временный слой - создается при клике. В месте клика(за иконкой) позиционируется маска вместе с новым изображением(изображение разумеется сразу на все полотно). Маска сразу же начинает расширяться. По окончании заменяем задний фон, с одновременным удалением временного слоя. Вообще надо было его постоянным сделать и установить opacity: 0.

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

    В настройках slider-setting.js (в html я только слои декларировал), добавляем к каждой картинке свой brightness, им затемняем/осветляем передний план и персонажа на дороге, в общем играем с освещенностью.

    В итоге получаем нужную форму. введите сюда описание изображения

    Слайдер, правда, так и не доделал, но для эксперимента кое-как работает.

    • 4
  3. Ver Nick
    2020-01-12T21:41:37Z2020-01-12T21:41:37Z

    Автор вопроса, и авторы ответов как-то все усложнили. Ведь сделать это можно с помощью простых анимаций и свойства css -webkit-filter:

    .block{
        -webkit-filter: blur(0px);
         -moz-filter: blur(0px);
           -o-filter: blur(0px);
          -ms-filter: blur(0px);
              filter: blur(0px);
          width: 30%;
          position: fixed;
          left: 50%;
          top: 50%;
          margin-left: -10%;
          margin-top: -10%;
          animation: 2s animate infinite;
          border-top-left-radius: 10%;
          border-top-right-radius: 10%;
    }
    @keyframes animate{
      from{
          -webkit-filter: blur(0px);
           -moz-filter: blur(0px);
             -o-filter: blur(0px);
            -ms-filter: blur(0px);
                filter: blur(0px);
          }
      to{
          -webkit-filter: blur(100px);
           -moz-filter: blur(100px);
             -o-filter: blur(100px);
            -ms-filter: blur(100px);
                filter: blur(100px);
                opacity: 0;
               width: 100%;
          margin-left: -50%;
          margin-top: -50%;
      }
     }
    <img src="https://bipbap.ru/wp-content/uploads/2017/04/tigr_morda_listya_vzglyad_polosatyy_1920x1080.jpg" class="block">

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5