Анимируйте абзац вместе с вращающимися изображениями - PullRequest
0 голосов
/ 13 июля 2010

В основном есть 4 изображения, которые прокручиваются со страницы.Теперь, когда пользователь нажимает на ссылку, он прокручивается.Но я хотел добавить дополнительную анимацию, где абзац (".image_text p") также появляется на странице, а затем, когда нажимается другая ссылка, этот текст идет вместе с остальной частью изображения и прокручивается.Все работает, кроме анимации части абзаца.

Проблема:

  1. Текст сплющен вместе (есть четыре абзаца, и они перекрывают друг друга)

  2. Когда я щелкаю - у него даже нет времени, чтобы исчезнуть - и противники сбрасывают страницу, прежде чем она исчезает.

  3. При первой загрузке страницы первый абзац вообще не отображается - при нажатии кнопки появляются все абзацы.Предполагается, что первый абзац появится при загрузке страницы, а затем нажмите, затем следующий абзац появится, как первый скролл с изображением.

Разметка и css верны.Я думаю, что проблема где-то в этом javascript:

      $(function() {
        $('#slideshow').crossSlide({
          sleep: 2,
          fade: 1
        }, [
          { src: '../images/img1.png' },
          { src: '../images/img2.png' },
          { src: '../images/img3.png' },
          { src: '../images/img4.png' }
        ])

                $(".paging").show();
                $(".paging a:first").addClass("active");
                $(".image_text p:first").addClass("active");


                //Get size of the image, how many images there are, then determin the size of the image reel.
                var imageWidth = $(".window").width();
                var imageSum = $(".image_reel img").size();
                var imageReelWidth = imageWidth * imageSum;

                //Adjust the image reel to its new size
                $(".image_reel").css({'width' : imageReelWidth});

                //Paging  and Slider Function
                rotate = function(){
                    $activep = $('.image_text p:first');


                    var triggerID = $active.attr("rel") - 1; //Get number of times to slide
                    var image_reelPosition = triggerID * imageWidth; //Determines the distance the image reel needs to slide

                    $(".paging a").removeClass('active'); //Remove all active class
                    $(".image_text p").removeClass('active'); //Remove all active class

                    $active.addClass('active'); //Add active class (the $active is declared in the rotateSwitch function)
                    $activep.addClass('active');

                    //Slider Animation
                    $(".image_reel").animate({
                        left: -image_reelPosition
                    }, 500 );

                    $(".image_text p").animate({
                        opacity: .99,
                        left: -image_reelPosition
                    }, 500 );

                }; 

                //Rotation  and Timing Event
                rotateSwitch = function(){
                    play = setInterval(function(){ //Set timer - this will repeat itself every 7 seconds
                        $active = $('.paging a.active').next(); //Move to the next paging
                        $activep = $('.image_text p').next(); //Move to the next paging
                        if ( $active.length === 0) { //If paging reaches the end...
                            $active = $('.paging a:first'); //go back to first
                        }
                        rotate(); //Trigger the paging and slider function
                    }, 7000); //Timer speed in milliseconds (7 seconds)
                };

                rotateSwitch(); //Run function on launch

                //On Hover
                $(".image_reel a").hover(function() {
                    clearInterval(play); //Stop the rotation
                }, function() {
                    rotateSwitch(); //Resume rotation timer
                }); 

                //On Click
                $(".paging a").click(function() {
                    $active = $(this); //Activate the clicked paging
                    //Reset Timer
                    clearInterval(play); //Stop the rotation
                    rotate(); //Trigger rotation immediately
                    rotateSwitch(); // Resume rotation timer
                    return false; //Prevent browser jump to link anchor
                });
      });

CSS для абзаца:

.image_text p {
text-align: right;
width: 500px;
opacity: 0;
position: absolute;
top: 0;
left: 0;
 }

Как можно видеть, причина, по которой текст не отображается, заключается в том, что непрозрачность начинаетсяв 0. Но это предназначено, потому что это должно исчезнуть. Однако, кажется, что это не исчезает, а скорее становится видимым, когда ссылка нажата, и к тому времени она прокручивается со страницы.

1 Ответ

0 голосов
/ 27 августа 2010

Решение состояло в том, чтобы указать, как p-теги можно умножить на ширину контейнера, а затем указать контейнер с объявлением css overflow:hidden, которое скрывает все p-теги, кроме текущего. Кроме того, p-теги должны быть смещены влево, чтобы заставить их вести себя встроенными:

.window {
    margin-top: 20px;
    height:286px;
    width: 655px;
    overflow: hidden; 
    position: relative;
} 

.image_text  {
    position: absolute;
    top: 0;
    left: 0;
    opacity: 0;
}

.image_text p {
    float: left;
    margin-left: 10em;
}
...