make slideDown () на заголовке при удалении класса переполнения

17

У меня есть всплывающее окно, которое отображается при просмотре. Как я сделал заголовок со следующим css:

.ellipsis {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  -o-text-overflow: ellipsis;
}

, который я добавляю / удаляю на основе щелчка, используя jQuery.
Но когда класс ellipsis удаляется, заголовок просто «POPS» отображается.

Итак, мой вопрос: Можно ли облегчить переход от скрытого к не с jquery или css?

Пример кода о том, что происходит здесь: Ссылка

    
задан Mathias Rønnow Nørtoft 17.02.2017 в 15:33
источник
  • Я в порядке с ним как есть: i.imgur.com/DVYVZGR.gifv –  Jorge Fuentes González 17.02.2017 в 15:35
  • Все поле содержимого работает, я считаю, что OP означает, что именно текст заголовка моментально появляется. –  Tyler Roper 17.02.2017 в 15:36
  • вы правы, это работает, но, как указано @Santi, мне не нравится, как заголовок «всплывает» так, а не исчезает в полный текст. –  Mathias Rønnow Nørtoft 17.02.2017 в 15:39
  • Подумайте о том, чтобы дать ему высоту набора и использовать анимацию, чтобы открыть ее, например: jsfiddle.net/od6m2p1b. Вероятно, вам также придется удалить свои свойства переполнения текста при щелчке. –  Tyler Roper 17.02.2017 в 15:43
  • Дело в том, что ive сделал его частью нашей CMS, поэтому менеджер по маркетингу может пойти и изменить текст для заголовка / содержимого / кнопок. Таким образом, придание ему фиксированной высоты оставило бы меня с другими проблемами и потенциальными ошибками. –  Mathias Rønnow Nørtoft 17.02.2017 в 15:48
Показать остальные комментарии

4 ответа

8

Проверьте это

 $(document).ready(function(){
       
      
 var havePoppedUp = 0;      
 $(window).on('scroll', function() {
   var st = $(this).scrollTop();
   var wh = $(document).height() - $(window).height();
   var perc = (st*100)/wh;
   
   if(perc > 50 && havePoppedUp == 0)
       {
           havePoppedUp = 1;
            $(".popupContent").css("display", "inline");
            $('.popupHeader h7').removeClass("ellipsis");  
           
       }
});


    $(".closepopup").click(function(){
        $(".popupContainer").fadeOut()
    });
      
    $(".closepopupBtn").click(function(){
        $(".popupContainer").hide()
    });


    $(".popupHeader").click(function(){
        if($('.popupContent:visible').length == 0)
            {
            $(".popupContent").slideDown(600);
           $('.popupHeader p').toggleClass( "ellipsis", 600 );
            }
        else {
            
            $(".popupContent").slideUp(600);
            $('.popupHeader p').toggleClass( "ellipsis", 600 );
            
        }    
            
    });        
                
});
.popupContainer {
    padding: 5px 15px 0 15px;
    position: fixed; 
    background-color: #718F97;
    bottom: 0;
    right: 50px;
    max-width: 300px;
    color: white;

}
.popupHeader {
    width: 100%;
    height: auto;
}
.popupHeader p {
    max-width: 85%;
    float: left;
    margin-bottom: 5px;
}

.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    -o-text-overflow: ellipsis;
}

.popupHeader button {
    float: right;
    text-decoration: none;
    border: none;
    background-color: #718F97;
    color: white;
    margin-bottom: 5px;
}

.popupContent {
    display: none; 
}

.popupContent p {
    max-width: 100%;
    clear: both;
}

.popupContent button {
    width: 100%;
    margin-bottom: 10px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div class="popupContainer">
          <div class="popupHeader clearfix">
            <p class="ellipsis"><b> Lorem ipsum dolar sit amt flip flop and something else</b></p><button class="closepopupBtn"><b>x</b></button>
          </div>
          <div class="popupContent">
                <p>
                    Text to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insert
                </p>
              <button class="button" style="background-color: green; width: 100%;" onclick="location.href='http://google.com';">Yes</button>
              <button  class="closepopup" type="button" style="background-color: orange" href="#">No</button>
          </div>
      </div>
    
ответ дан Ruby 20.02.2017 в 10:59
3

Поместите removeClass и addClass в slideUp и slideDown успешного обратного вызова. Проверьте приведенный ниже фрагмент.

 $(document).ready(function(){
       
      
 var havePoppedUp = 0;      
 $(window).on('scroll', function() {
   var st = $(this).scrollTop();
   var wh = $(document).height() - $(window).height();
   var perc = (st*100)/wh;
   
   if(perc > 50 && havePoppedUp == 0)
       {
           havePoppedUp = 1;
            $(".popupContent").css("display", "inline");
            $('.popupHeader h7').removeClass("ellipsis");  
           
       }
});


    $(".closepopup").click(function(){
        $(".popupContainer").fadeOut()
    });
      
    $(".closepopupBtn").click(function(){
        $(".popupContainer").hide()
    });


    $(".popupHeader").click(function(){
        if($('.popupContent:visible').length == 0)
            {
            $(".popupContent").slideDown(600,function(){
            $('.popupHeader p').removeClass("ellipsis");
            });
            }
        else {
            
            $(".popupContent").slideUp(600,function(){
            $('.popupHeader p').addClass("ellipsis");
            });
        }    
            
    });        
                
});
.popupContainer {
    padding: 5px 15px 0 15px;
    position: fixed; 
    background-color: #718F97;
    bottom: 0;
    right: 50px;
    max-width: 300px;
    color: white;

}
.popupHeader {
    width: 100%;
    height: auto;
}
.popupHeader p {
    max-width: 85%;
    float: left;
    margin-bottom: 5px;
}

.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    -o-text-overflow: ellipsis;
}

.popupHeader button {
    float: right;
    text-decoration: none;
    border: none;
    background-color: #718F97;
    color: white;
    margin-bottom: 5px;
}

.popupContent {
    display: none; 
}

.popupContent p {
    max-width: 100%;
    clear: both;
}

.popupContent button {
    width: 100%;
    margin-bottom: 10px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 <div class="popupContainer">
          <div class="popupHeader clearfix">
            <p class="ellipsis"><b> Lorem ipsum dolar sit amt flip flop and something else</b></p><button class="closepopupBtn"><b>x</b></button>
          </div>
          <div class="popupContent">
                <p>
                    Text to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insertText to insert
                </p>
              <button class="button" style="background-color: green; width: 100%;" onclick="location.href='http://google.com';">Yes</button>
              <button  class="closepopup" type="button" style="background-color: orange" href="#">No</button>
          </div>
      </div>
    
ответ дан Peter Darmis 24.02.2017 в 20:42
2

Я создал фрагмент для вас. Я использовал эффект jquery . Надеюсь, это поможет вам.

$(function(){
    $('.affix-button').on('click', function(){
        $(this).parents('.knowledgebase-affix').toggleClass('close-appix');
    });
    $('.close-me').on('click', function(){
      $(this).parents('.knowledgebase-affix').removeClass('close-appix');
    });
});
.knowledgebase-affix {
  background-color: #ffffff;
  box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.15);
  display: block;
  padding: 25px;
  position: fixed;
  right: 30px;
  bottom: 0;
  transform: translateY(100%);
  transition: top 0.3s ease-in-out 0s, transform 0.3s ease-in-out 0s;
  width: 242px;
  z-index: 1030;
}
.knowledgebase-affix .affix-button {
  background-color: #57c7d4;
  border: none;
  border-radius: 3px 3px 0 0;
  bottom: 100%;
  color: #ffffff;
  font-size: 16px;
  height: 30px;
  padding: 0;
  position: absolute;
  right: 0;
  width: 30px;
}
.knowledgebase-affix.close-appix {
  transform: translateY(0);
}
.knowledgebase-affix .nav li {
  padding-left: 11px;
  position: relative;
}
.knowledgebase-affix .nav li a {
  color: #5b5b5b;
  display: inline-block;
  font-size: 13px;
  line-height: 16px;
  padding: 0;
  transition: color 0.3s ease-in-out 0s;
}
.knowledgebase-affix .nav li a:before {
  background-color: #5b5b5b;
  border-radius: 50%;
  content: '';
  height: 4px;
  left: 0;
  position: absolute;
  top: 9px;
  transition: background-color 0.3s ease-in-out 0s;
  width: 4px;
}
.knowledgebase-affix .nav li a:hover, .knowledgebase-affix .nav li a:focus {
  color: #9272cd;
}
.knowledgebase-affix .nav li a:hover:before, .knowledgebase-affix .nav li a:focus:before {
  background-color: #9272cd;
}
.knowledgebase-affix .nav li a + .nav {
  display: none;
}
.knowledgebase-affix .nav li a.active {
  color: #9272cd;
}
.knowledgebase-affix .nav li a.active:before {
  background-color: #9272cd;
}
.knowledgebase-affix .nav li a.active + .nav {
  display: flex;
}
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="sps sps--abv knowledgebase-affix" id="knowledgebase-affix">
  <button class="affix-button" type="button" role="button"><i class="fa fa-caret-down" aria-hidden="true"></i></button>
  <ul class="nav flex-column">
      <li class="nav-item">
          <a href="#codephrases-example" class="nav-link active">Code phrases</a>
      </li>
      <li class="nav-item">
          <a href="#infobox-example" class="nav-link">Info box example</a>
      </li>
      <li class="nav-item">
          <a href="#typography-example" class="nav-link">Typography</a>
      </li>
      <li class="nav-item">
          <a href="#accordions-example" class="nav-link">Accordions</a>
      </li>
      <li class="nav-item">
          <a href="#tab-example" class="nav-link">Tabs</a>
      </li>
      <li class="nav-item">
          <a href="#icon-example" class="nav-link">Icons</a>
      </li>
      <li class="nav-item">
          <a href="#bullets-number-example" class="nav-link">Bullets & numbers</a>
      </li>
      <li class="nav-item">
          <a href="#table-example" class="nav-link">Table</a>
      </li>
  </ul>
  <button role="button" type="button" class="close-me">Close</button>
</div>
<!-- Slider bar Affix end -->
    
ответ дан Rahul 20.02.2017 в 09:38
  • Я уверен, что вы havnt прочитали вопрос, так как единственное, чего нет в «демо», вы добавили хедлайнером в элипсированном и не элипсированном режиме. Это то, что я ищу. –  Mathias Rønnow Nørtoft 20.02.2017 в 09:44
  • Итак, вы хотите сделать, когда ваш класс .ellipsis удалит из <p>, на этот раз ваш контент <p> будет удален. –  Rahul 20.02.2017 в 09:55
0

Как многоточие - это состояние «включено» или «выключено» без каких-либо значений между ними (я считаю, по крайней мере), я не думаю, что можно осуществить переход по этому свойству напрямую.

Я немного изменил подход, переместив либо высоту или максимальную высоту div. Вы можете видеть, как работает скрипка здесь:

Fiddle с использованием max-height (cudos для ответа от Jake в этот вопрос ):
В этой скрипке я использовал max-height, чтобы сделать процесс автоматический; что означает, что он более или менее отзывчив .

Скрипт с использованием высоты и максимальной высоты, явно заданный в css:
В этой скрипте высота явно задана в css .

В последнем решении вам может потребоваться проверить, применяются ли эти высоты для разных размеров экрана.

Обратите внимание, что в первом решении (чисто основанном на max-height) max-height устанавливается на значение, которое, я считаю, не будет отображаться в любое время / размер экрана. Поскольку максимальная высота выше фактического элемента (60px & gt; 45px), существует небольшая задержка перехода от разности максимальной высоты (60 пикселей) и фактической высоты (45 пикселей) при выключении многоточия. Если popupHeader p никогда не будет извлекать 45px, вы можете это изменить. Однако переходная задержка практически не существует для зрителя и дает вам запас прочности в случае очень маленьких экранов.

Кроме того, обратите внимание, что это решение не потребует загрузки дополнительной библиотеки, кроме существующего jQuery.

JQuery и css из примера максимальной высоты можно увидеть здесь:

JQuery

 $(document).ready(function(){


 var havePoppedUp = 0;      
 $(window).on('scroll', function() {
   var st = $(this).scrollTop();
   var wh = $(document).height() - $(window).height();
   var perc = (st*100)/wh;

   if(perc > 50 && havePoppedUp == 0)
       {
           havePoppedUp = 1;
            $(".popupContent").css("display", "inline");
            $('.popupHeader h7').removeClass("ellipsis");  

       }
});


    $(".closepopup").click(function(){
        $(".popupContainer").fadeOut()
    });

    $(".closepopupBtn").click(function(){
        $(".popupContainer").hide()
    });


    $(".popupHeader").click(function(){
        if($('.popupContent:visible').length == 0)
            {
            popupHeaderHeight = $('.popupHeader p').height();
            $(".popupContent").slideDown(600);
            $('.popupHeader p').css('max-height', popupHeaderHeight ).removeClass("ellipsis").css('max-height', '60px');
            }
        else {

            $(".popupContent").slideUp(600);
            $('.popupHeader p').css('max-height', popupHeaderHeight);
            setTimeout(function(){$('.popupHeader p').addClass("ellipsis");},500);
        }    

    });        

});

CSS

.popupContainer {
    padding: 5px 15px 0 15px;
    position: fixed; 
    background-color: #718F97;
    bottom: 0;
    right: 50px;
    max-width: 300px;
    color: white;

}
.popupHeader {
    width: 100%;
    height: auto;
}
.popupHeader p {
    max-width: 85%;
    float: left;
    margin-bottom: 5px;
    overflow:hidden;
    transition:all 0.6s;
/* The only differences is the overflow and transition */
}

.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    -o-text-overflow: ellipsis;
}

.popupHeader button {
    float: right;
    text-decoration: none;
    border: none;
    background-color: #718F97;
    color: white;
    margin-bottom: 5px;
}

.popupContent {
    display: none; 
}

.popupContent p {
    max-width: 100%;
    clear: both;
}

.popupContent button {
    width: 100%;
    margin-bottom: 10px;
}
    
ответ дан Chri.s 27.02.2017 в 08:23