Не можете сделать этот слайдер - PullRequest
1 голос
/ 07 августа 2011

Итак, я хочу сделать просмотрщик товаров чем-то вроде миниатюр, которые можно перемещать назад или вперед, нажимая кнопки назад / вперед. Я не знаю, почему мой код не работает. Вот код. Пожалуйста, помогите мне найти проблемы в этом. Спасибо!

HTML-код

<div id="wrapper">

<div id="main-image">
</div>


<div class='main-slider'>

         <div class="window">
                <div class='slider-large-image'>
                <img src='img3.png' height="500" width="960"> </img> 
                <img src='img2.png' height="500" width="960"> </img> 
                <img src='img3.png' height="500" width="960"> </img> 
                <img src='img4.png' height="500" width="960"> </img>
                </div>    
         </div>

        <div class='slider-pager'>
        <a href="#" id="b"> &lsaquo; </a>
        <a href="#" id="f"> &rsaquo; </a>
         </div>   

</div>

Javascript код

$(document).ready(function() {



var imagewidth = /*$(".window").width()*/960;
var imagesum = /*$(".slider-large-image img").size()*/5;
var imagereelwidth = imagewidth * imagesum;


$(".slider-large-image").css({'width' : imagereelwidth});

rotatef = function() {



$(".slider-large-image").animate({ 
left : -imagewidth
},500 );
};
rotateb = function() {



$(".slider-large-image").animate({ 
left : imagewidth
},500 );
};

$(".slider-pager a#b").click(function() {
rotateb(); //Trigger rotation immediately
//return false; //Prevent browser jump to link anchor
}); 
$(".slider-pager a#f").click(function() {
rotatef(); //Trigger rotation immediately
//return false; //Prevent browser jump to link anchor
}); 

});

CSS

#wrapper
 {
margin:0 auto;
 }
.main-slider
{
float:left;
position:relative;
margin-bottom:10px;
/*background-color:#CCC;*/
border: 0px solid #000;
top:25px;
left:0px;
z-index:1004;
-moz-border-radius:5px;
border-radius:5px;
    -moz-box-shadow: 0px 0px 30px 1px #999;
  -webkit-box-shadow: 0px 0px 30px 1px #999;
  box-shadow: 0px 0px 30px 1px #999;

}
.window
{
width: 960px;
height: 500px;
overflow:hidden;
position:relative;
}
.slider-large-image
{
position:absolute;
top:0px;
left:0px;
}


.slider-large-image img {float:left;}

.slider-pager
{
position:absolute;
float:left;
width: 100px;
height: 10px;
background-color:#333;
top:0%;
left:89.5%;
padding-bottom:10px;
padding-right:0;
 }
 .slider-pager a 
 {
padding:1px;
text-align:center;
text-decoration:none;
font-size:20px;
font-weight:700;
color:#ccc;
margin-right:5px;
width:1px;
height:1px;

position:relative;
top:-10px;
 }
.main-slider
{
padding:0px;
color:#FFF;
text-align: center;
line-height: 40px;
font:"Comic Sans MS", cursive;
font-size:20px;
text-decoration:none;
}
.main-slider .slider-pager a:hover
{
background-color:#999;
-moz-border-radius:10px;
border-radius:10px;
color:black;
}
.main-slider .slider-pager a.active
{
background-color:#999;
-moz-border-radius:10px;
border-radius:10px;
}
.main-slider .info-page
 {
background-color:#000;
width:600px;
height:50px;
text-align:center;
text-shadow:#666;
font:"28 Days Later";
color:#FFF;
line-height: 40px;
font-size:40px
 }
 .main-slider .info-page #d:hover
 {
color:#FF0;
  }

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

Давайте начнем с вашего форматирования (что я исправил, кстати):

  1. Ваш первый <div id="wrapper"> не закрывается!
  2. IMG-тег самозавершается! НЕПРАВИЛЬНО: <img src=""></img> ПРАВИЛЬНО: <img src="" />
  3. Некоторые из ваших переменных css3 предназначены для будущих браузеров и -moz-, но отсутствуют -webkit- !! Пример: -moz-border-radius: 10px; border-radius: 10px;
  4. Кроме того, в одной точке вы используете = '', а в другой = "". Это в основном хорошо, но становится раздражающим, чтобы поддержать позже и не выглядит очень чистым! Пример: <img src='img3.png' height="200" width="300" />
  5. Я не нашел ни одной функции для <div id="main-image"></div> в предоставленном вами коде. В следующий раз удалите эти типы элементов, когда вы составите вопрос здесь, так как этот элемент на 100% не имеет отношения к рассматриваемой проблеме. (То же самое относится к и .main-slider .info-page #d:hover {} в вашем CSS)
  6. Не видел ни одной причины, почему .main-slider {} должно быть объявлено дважды в css (поэтому я объединил их, если у вас есть специальное назначение, а затем вернул его обратно, как было)
  7. Если вы не создаете запасную версию для какой-либо другой версии браузера (например, мобильной версии). Тогда нет необходимости помещать переменные width = "" и height = "" в ваш IMG-тег напрямую. У вас уже есть правильное место в CSS для этого: .slider-large-image img {float: left; width:; height:;}
  8. В вашем css у вас есть .slider-pager a и .main-slider .slider-pager a:hover. Зачем добавлять .main-slider перед .slider-pager a:hover в любом случае?
  9. Если у вас одинаковые параметры для одной и той же переменной в css, используйте запятую, чтобы объединить их: .slider-pager a:hover, .slider-pager a:active {background-color: #999; -moz-border-radius: 10px; border-radius: 10px;}
  10. Вы используете position: absolute; слишком много. Я твердо верю, что вы хотели использовать position: relative;
  11. Был дополнительный}); в конце всего этого. Код был изначально в какой-то функции или плагине?
  12. Нет такого параметра, как font, в css!

ПРИМЕЧАНИЯ:

  • Вы не предоставили изображения. В следующий раз, пожалуйста, гуглите несколько изображений, чтобы вам было легче помочь.
  • Используйте такие сайты, как jsfiddle.net , чтобы сделать хорошие примеры вашей проблемы. Вы можете спросить: почему я должен тратить свое время на это? Мы зададим вам тот же вопрос, когда рассмотрим ваши примеры. Это ДЕЙСТВИТЕЛЬНО сделает все быстрее для вас, для нас, при поиске быстрых и ценных решений.
  • Ваш код был настолько грязным, что я не могу понять, где должен находиться элемент <div class="slider-pager"></div>? Очевидно, что он находится внутри общего контейнера (сверху изображения), но сверху, снизу или, может быть, снизу в центре? Я поставил его внизу по центру, как он выглядел там лучше всего)
  • Удалено $(".slider-large-image").css({'width' : imagereelwidth}); и добавлено .slider-large-image, чтобы оно вращалось бесконечно.
  • Я редактировал так много, что забыл обновлять каждый шаг. В любом случае, это работает. А также его бесконечность сейчас, означая, что карусели нет конца.
  • Я потратил около 2 часов на этот ответ. В общем, я был слишком ленив, чтобы составить его в виде плагина. Прочтите это и выполните эти шаги, если вы хотите поместить его в форму плагина.
  • Если вы хотите добавить функцию, которая автоматически переключает слайды, тогда используйте jQuery doTimeout: как setTimeout, но лучше !
  • Надеюсь, вы не принимаете мой ответ в отрицательной форме. Правила сообщества на самом деле говорят, что мы должны указать новичкам правильный путь и т. Д. Я на самом деле люблю тебя, парень:)

Демонстрационная версия

http://jsfiddle.net/hobobne/PmXr2/

Полная версия кода:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title>Having trouble making this product slider. Please help? - Kalle H. Väravas answer</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <style>
        html, body {margin: 0px; padding: 0px;}
        html, body, div, th, td, p, a {font-family: "Comic Sans MS", cursive; font-size: 12px; color: #000000;}
        .cb {clear: both;}
        #wrapper {width: 400px; margin: 0px auto;}
            .main-slider {float: left; position: relative; margin-bottom: 10px; border: 0px solid #000; top: 25px; left: 0px; -moz-border-radius: 5px; border-radius: 5px; -moz-box-shadow: 0px 0px 30px 1px #999; -webkit-box-shadow: 0px 0px 30px 1px #999; box-shadow: 0px 0px 30px 1px #999; padding: 0px; color: #FFF; text-align: center; text-decoration: none; /*background-color: #CCC;*/}
            .window {width: 300px; height: 200px; overflow: hidden; position: relative;}
                .slider-large-image {position: relative; overflow: hidden; float: left; list-style-type: none; margin: 0px; padding: 0px;}
                    .slider-large-image li {margin: 0px; padding: 0px; float: left; display: inline-block;}
                        .slider-large-image li img {float: left; width: 300px; height: 200px;}
            .slider-pager {position: relative; z-index: 2; margin: -40px auto 0px;}
                .slider-pager a {margin: 0px 2px; padding: 2px; text-align: center; text-decoration: none; font-size: 20px; font-weight: bold; color: #ccc;}
                    .slider-pager a:hover,
                    .slider-pager a:active {background-color: #999; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}
                    .slider-pager a:hover {color: black;}
                    .slider-pager a.active {/* background-color and border-radius used to be here.. */}
    </style>
</head>
<body>
    <div id="wrapper">
        <div class="main-slider">
            <div class="window">
                <ul class="slider-large-image">
                    <li><img src="http://images.sneakhype.com/wp-content/uploads/2010/12/Miley-Cyrus-300x200.jpg" /></li>
                    <li><img src="http://wa2.www.3news.co.nz/Portals/0-Articles/185340/miley-cyrus_reuters_420.jpg?width=300" /></li>
                    <li><img src="http://cdn.buzznet.com/media/jjr/headlines/2009/03/miley-cyrus-ryan-seacrest.jpg" /></li>
                    <li><img src="http://images.smh.com.au/2010/12/29/2112265/miley_cyrus_400-300x200.jpg" /></li>
                </ul>
            </div>
            <div class="slider-pager"><a href="#" id="b">&lsaquo;</a><a href="#" id="f">&rsaquo;</a></div>
        </div>
        <br class="cb" />
    </div>
    <script>
        var imagewidth = $('.slider-large-image li').outerWidth();
        var imagesum = $('.slider-large-image li img').size();
        var imagereelwidth = imagewidth * imagesum;
        $(".slider-large-image").css({'width' : imagereelwidth});
        $('.slider-large-image li:first').before($('.slider-large-image li:last'));
        $('.slider-large-image').css({'left' : '-' + imagewidth + 'px'});
        rotatef = function (imagewidth) {
            var left_indent = parseInt($('.slider-large-image').css('left')) - imagewidth;
            $('.slider-large-image:not(:animated)').animate({'left' : left_indent}, 500, function() {
                $('.slider-large-image li:last').after($('.slider-large-image li:first')); 
                $('.slider-large-image').css({'left' : '-' + imagewidth + 'px'});
            }); 
        };
        rotateb = function (imagewidth) {
            var left_indent = parseInt($('.slider-large-image').css('left')) + imagewidth;       
            $('.slider-large-image:not(:animated)').animate({'left' : left_indent}, 500, function(){               
                $('.slider-large-image li:first').before($('.slider-large-image li:last')); 
                $('.slider-large-image').css({'left' : '-' + imagewidth + 'px'});
            });
        };
        $(".slider-pager a#b").click(function () {
            rotateb(imagewidth);
            return false;
        });
        $(".slider-pager a#f").click(function () {
            rotatef(imagewidth);
            return false;
        });
    </script>
</body>
</html>
1 голос
/ 07 августа 2011

Попробуйте это:

rotatef = function() {

$(".slider-large-image").animate({ 
"left" : "-="+imagewidth
},500 );
};

rotateb = function() {

$(".slider-large-image").animate({ 
"left": "+="+imagewidth
},500 );
};
...