Hi everybody
This my testing gallery slider, it will count image's amount, and
prevent it not to outside the wrapper, but I got one problem, if user
click button after the animation finished, it's done well, but if user
click too fast, the js will not catch the left property in time
correctly, how to fix the bug?

CSS
<style type="text/css">
<!--
body { font-size: 12px; }
#wrapper
{
        height: 50px;
        width: 50px;
        overflow: hidden;
        position: relative;
        border:1px #FF0000 solid;
}
ul
{
        margin: 0px;
        padding: 0px;
        list-style-type: none;
        position: absolute;
        white-space:nowrap;
}
li
{
        display:inline;
        margin:0 -3px 0 0;
        width:50px;
        height:50px;
        overflow:hidden;
}
-->
</style>

HTML
<div id="wrapper">
    <ul>
        <li><img src="1.jpg" border="0" /></li>
        <li><img src="2.jpg" border="0" /></li>
        <li><img src="3.jpg" border="0" /></li>
    </ul>
</div>
<input type="button" name="left" id="left" value="left" />
<input type="button" name="right" id="right" value="right" />

JavaScript
<script language="javascript">
<!--
        $(document).ready(function()
        {
                var wrapper = $('#wrapper');
                var ul = $('ul',wrapper);
                var itemsWidth = $('li',ul).outerWidth();
                var itemsLen = $('li',ul).size();
                var maxMove = (itemsLen - 1) * itemsWidth;
                var minMove = 0;
                var right = $('#right');
                var left = $('#left');
                right.click(function()
                {
                        if(ul.css('left') != (maxMove * -1) + 'px')
                        {
                                ul.animate({left:'-=50px'});
                        }
                });
                left.click(function()
                {
                        if(ul.css('left') != minMove + 'px')
                        {
                                ul.animate({left:'+=50px'});
                        }
                });
        });
//-->
</script>

Reply via email to