随笔 - 22, 文章 - 0, 评论 - 97, 阅读 - 58813
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Jquery 图片走马灯效果原理

Posted on   冲杀  阅读(3325)  评论(0编辑  收藏  举报

本篇只讲解水平走马灯效果,垂直向上走马灯效果不讲解,原理一样,但是水平走马灯效果有一个小坑。待会讲解

照例先上代码:

HTML:

复制代码
<div class="box">        
        <div style="width: 1000px;" id="boxdiv">
            <ul>
                <li style="display: block;" title="晚霞中的民航飞机"><a href="#">
                    <img src="http://5.26923.com/download/pic/000/337/f2418c0850058ff9edb2bb85e30be1cb.jpg" /></a></li>
                <li title="波音787"><a href="#">
                    <img src="http://5.26923.com/download/pic/000/337/8d96f0fc8a9f2f9e5af628ec4b9ef64e.jpg" /></a></li>
                <li title="一起去旅行"><a href="#">
                    <img src="http://5.26923.com/download/pic/000/338/14533ca737e6b63c0abe3ee4dc22b6a4.jpg" /></a></li>             
            </ul>
        </div>
    </div>
复制代码

<div class="box">中,再包含了一个div,且设置了一个很比较大的宽度,是为了解决一个在垂直走马灯下没有的坑。该坑的效果是在li标签floatleft的情况,不要里面的DIV,会出现图片轮播后,显示中的最后一张图片由下向上的跳动效果,这是float的本身特性造成的,因为父元素宽度不够的情况下,后面的元素会自动往下左沉下去,一旦上面宽度够了,就会自动飘上来,这个飘就会造成显示中的最后一张图片的跳动效果,所以采用内部嵌套一个DIV 并设置<div class="box">overflow CSS样式来解决该问题。

CSS:

复制代码
.box
        {
            width: 800px;
            height: 200px;
            margin-top: 100px;
            margin-left: 100px;
            overflow: hidden;
        }

            .box img
            {
                border-style: none;
                height: 200px;
            }

            .box ul
            {
                margin: 0px;
                padding: 0px;
                list-style-type: none;
            }

                .box ul li
                {
                    float: left;
                }
复制代码

脚本:

复制代码
<script type="text/javascript">
        $(document).ready(function () {
            new ZouMa().Start();
        });
        function ZouMa() {
            this.maxLength = 3; //最低显示数           
            this.Timer = 2000;//计时器间隔时间
            this.Ul = $(".box ul");

            var handId;//计时器id
            var self = this;
            this.Start = function () {
                if (self.Ul.children().length < this.maxLength) {
                    self.Ul.append(self.Ul.children().clone());
                }
                handId = setInterval(self.Play, self.Timer);
            }
            this.Play = function () {
                var img = self.Ul.children().eq(0);
                var left = img.children().eq(0).width();
                img.animate({ "marginLeft": (-1 * left) + "px" }, 600, function () {
                    //appendTo函数是实现走马灯一直不间断播放的秘诀。
                    //目前网上看到的很多走马灯,走到最后一张的时候,会立马闪回第一张,而不是继续从后往前推进,即是没有明白该函数的作用的原因
                    $(this).css("margin-left", "auto").appendTo(self.Ul);
                });
            }
        }
    </script>
复制代码

此处照例使用了jquery的动画效果函数animate来实现走马灯效果,并配合appendTo函数来实现无尽播放的效果。

有关appendTo函数的作用请参阅jquery的API文档,animate也请参阅API文档

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示