2016-09-26 8 views
0

私は編集が必要なアニメーションを持っており、それが私にいくつかの問題を引き起こしています。htmlスパン要素の後にテキストを追加する

私はシェブロンイメージを持っていて、次にテキストがmoreまたはlessのテキストコンテナがあります。この情報は人物を記述しており、シェブロンまたはテキストのいずれかをクリックすると、ウィンドウが展開され、ユーザーはすべての情報を読むことができます。

moreをクリックすると、アニメーションが展開され(良い)、テキストがlessに切り替わります。しかし、シェブロンをクリックしてアニメーションを拡大してもテキストは変わらないので、すでに展開されているアニメーションとlessのときはmoreというテキストが表示されます。

私はフィドルやコードペンを持っていませんが、何が起こっているのかを記述した画像があります。

これはアニメーション

enter image description here

私は山形をクリックして、ではない実際のテキスト、テキストが変更されない場合、これは後になる前です。

enter image description here

私のJSは少し長いです。 (そのもコーヒースクリプトで書かれた)

personMore: -> 
    $('a.moreLink').each -> 
     $thisMore = $(this).children('span.moreText') 
     $thisLess = $(this).children('span.lessText') 
     $(this).on 'click', (e) -> 
     e.preventDefault() 
     return 
     $thisMore.on 'click', (e) -> 
     $allPeople = $('.person') 
     $thisPerson = $(this).parents('.isotope') 
     $moreLink = $(this) 
     $lessLink = $(this).siblings('.lessText') 
     $thisP = $(this).parents('.moreLink').siblings('p') 
     $moreLink.hide() 
     $lessLink.show() 
     $thisP.toggleClass 'moreActive' 
     $thisPerson.removeClass('someonesActive').addClass 'activePerson' 
     e.preventDefault() 
     return 
     $thisLess.on 'click', (e) -> 
     $allPeople = $('.person') 
     $thisPerson = $(this).parents('.isotope') 
     $lessLink = $(this) 
     $moreLink = $(this).siblings('.moreText') 
     $thisP = $(this).parents('.moreLink').siblings('p') 
     $openItems = $('.moreActive').size() 
     $lessLink.hide() 
     $moreLink.show() 
     $thisP.toggleClass 'moreActive' 
     e.preventDefault() 
     if $openItems == 1 
      $('.person').removeClass 'activePerson' 
     return 
     return 
    return 

私の見解である

.row 
    .person.col-sm-4.isotope 
    %a{href: "https://www.linkedin.com/in/harambe", target: "window"} 
     %h3 Harambe 
    %h4 Worlds Greatest Gorilla 
    = image_tag "harambe.jpg" 
    %p 
     Hot chicken gochujang kombucha artisan. Cornhole snackwave enamel pin helvetica, listicle pabst fingerstache blog. Neutra butcher tote bag activated charcoal, semiotics organic pitchfork forage woke. Brooklyn activated charcoal put a bird on it jean shorts. Fam subway tile readymade skateboard heirloom, ugh shabby chic vinyl echo park bespoke whatever. Disrupt microdosing vice tilde, tattooed chia mlkshk humblebrag master cleanse swag kickstarter. Activated charcoal gastropub vinyl, banjo raclette 90's deep v celiac bitters meh. 
    %a.sliding.moreLink{:href => "#"} 
     %span.moreText more 
     %span.lessText less 
    %a.moreLink{:href => "#"} 
     %span.moreText= image_tag "moreArrow.png", alt: "more/less" 
     %span.lessText= image_tag "moreArrow.png", alt: "more/less" 

最後に私のCSS

.aboutPeople .person a.moreLink{ 
    text-align: center; 
    display: block; 
    font-style: italic; 
    position: relative; 
    z-index: 99; 
    background: #ebebeb; 
    padding-bottom: 20px; 
    width: 80%; 
    margin: 0 auto; 
} 

答えて

1

これは、画像を内部にテキストを持っていないとセンス原因a.more_linkになります。

とにかく、私はあなたが達成しようとしているものはあまりにも複雑で、jsの方がより複雑で依存していると思います。

リンクを1つに減らして1つのクラスを変更すると、同じ結果が得られ、すべてがよりきれいになります。私は.personに1つのクラスを持ち、それに依存してスタイリングをするだけで、もっと減らそうとします。多分、あなたは... .activePersonにCSS3 ~セレクタ相対でsomeonesActiveを使用して

.row 
    .person.col-sm-4.isotope 
    %a{href: "https://www.linkedin.com/in/harambe", target: "window"} 
     %h3 Harambe 
    %h4 Worlds Greatest Gorilla 
    = image_tag "harambe.jpg" 
    %p 
     Hot chicken gochujang kombucha artisan. Cornhole snackwave enamel pin helvetica, listicle pabst fingerstache blog. Neutra butcher tote bag activated charcoal, semiotics organic pitchfork forage woke. Brooklyn activated charcoal put a bird on it jean shorts. Fam subway tile readymade skateboard heirloom, ugh shabby chic vinyl echo park bespoke whatever. Disrupt microdosing vice tilde, tattooed chia mlkshk humblebrag master cleanse swag kickstarter. Activated charcoal gastropub vinyl, banjo raclette 90's deep v celiac bitters meh. 
    %a.sliding.moreLink{:href => "#"} 
     %span.moreText more 
     %span.lessText less 
     %span.lessText= image_tag "moreArrow.png", alt: "more/less" 

以下を避けることができます。

.aboutPeople .person a.moreLink{ 
    text-align: center; 
    display: block; 
    font-style: italic; 
    position: relative; 
    z-index: 99; 
    background: #ebebeb; 
    padding-bottom: 20px; 
    width: 80%; 
    margin: 0 auto; 
    .lessText{ 
    display: none; 
    } 
    &.open{ 
    .moreText{ 
     display: none; 
    } 
    .lessText{ 
     display: block; 
    } 
    } 
} 

コーヒー(申し訳ありません構文が正しくない場合)

personMore: -> 
    $('a.moreLink').on 'click', (e) -> 
     e.preventDefault() 
     $this = $(this) 
     $allPeople = $('.person') 
     $this.toggleClass 'open' 
     $this.siblings('p').toggleClass 'moreActive' 
     if $this.hasClass('open') 
     $allPeople.addClass('someonesActive').removeClass 'activePerson' 
     $this.cosest('.person').removeClass('someonesActive').addClass 'activePerson' 
     else 
     $this.cosest('.person').removeClass 'activePerson' 
     if $('.person.activePerson').length <= 0 
     $allPeople.removeClass('someonesActive') 
     return 
    return 

をあなたがしようとしていたことを想像してみましたが、これは単なる考えです。

+0

これは非常に便利でした、あなたに近づいてくれてありがとう! – kdweber89

0

問題は、$ moreLinkと$ lessLink変数を定義する方法であります:

$moreLink = $(this) 
$lessLink = $(this).siblings('.lessText') 

Inこのスニペットをクリックすると、クリックされた要素が$moreLinkとなり、クラスlessTextに隣接するのスパンは、$lessLinkとしてクリックされます。

実際には、要素をクリックしたときに両方のスパンセットを非表示にして表示します。

のみページでこれらのアニメーションの単一のものがある場合、あなたはあなたにセレクタを切り替えることができます

$moreLink = $('span.moreText') 
$lessLink = $('span.lessText') 

ページに複数ある場合、あなたは余分な識別子を追加するか必要があります要素別の方法、すなわち、各アニメーションにまたはフィルタ:

$moreLink = $(this).closest('.isotope').find('span.moreText') 
$lessLink = $(this).closest('.isotope').find('span.lessText') 
関連する問題