轮播图的实现(带详细注释)

这是刚刚接触JQuery时拿来练练手写的,光学不动手是不行的。因为刚接触JQuery,对它的很多方法还不熟悉,所以参考一些了网上别人写的代码,自己边学边总结,因为在写这个的时候查了不少资料,本人也是那种喜欢多写注释的人,所以代码里注释比较多,思路应该算法比较清晰,适合新手看懂,我也尽量用简短的代码来实现,欢迎指出不足的地方。

以下是代码部分(注意引入JQ文件)

index.html

<script type="text/javascript">
$(document).ready(function(){
$.focus("#focus001");   //轮播效果的启动方法 #focus001是字符串 
}
);
</script>

  <!--轮播图的代码-->         

  <div class="focus" id="focus001">
    <ul>
        <li><a ><img src="./images/02.jpg"  alt=""  style="width: 500px; height: 300px;" /></a></li>
        <li><a ><img src="./images/01.jpg"  alt=""  style="width: 500px; height: 300px;"/></a> </li>
        <li><a ><img src="./images/03.jpg"  alt="" style="width: 500px; height: 300px;" /></a> </li>
    </ul>
</div>    
  <!--轮播图的代码--> 

css

div{
	 border:solid 1px red; 
}

#focus001 {
   overflow:hidden;    /* 这里很关键*/
   position:relative;
   left:400px;   /*这里使整体向右移动了400px*/
   height: 300px;
   width: 500px;<pre name="code" class="css">}

#focus001 ul { position:relative;/*width: 1500px; ul的width在这里不需要设置,因为在sl.js中动态设置了 ,这样就算由现在的3张图片轮播改成4张,这里的css样式也不用动*/ /*left:-500px; 通过改变ul的left属性来达到轮播的效果 */ }#focus001 ul li {list-style-type:none;float: left; width: 500px;height: 300px;}.btn {position:absolute; width:100px; height:30px;left: 200px;top: 270px;}.focus .btn span{display:inline-block;padding-left: 5px;margin-left: 5px;padding-right: 5px; font-size:23px;height:24px; line-height:24px; text-align:center;background:#fff;cursor:pointer;/*鼠标指针变成 手 的形状*/}

.focus .btn span.on {background:#fff;}


 .preNext {width:45px; height:100px; position:absolute; top:90px;
cursor:pointer;/*鼠标指针变成 手 的形状*/}.focus .pre {left:0;} /*看需求再添背景*/.focus .next {right:0;}


 sl.js 

$(function(){

$.focus= function(slid) {   //focus是自定义的方法   slid是字符串变量 slid在这里就是index.html里面的 #focus001
	    var sWidth = $(slid).width(); //获取焦点图的宽度(显示面积)
		var len = $(slid).find("ul li").length; //获取焦点图个数
		var index = 0;      //代表当前显示图片的索引

		var picTimer;
		
        //本例为左右滚动,即所有li元素都是在同一排向左浮动,所以这里需要计算出外围ul元素的宽度
		$(slid+" ul").css("width",sWidth * (len));


		//以下代码添加数字按钮和按钮后的半透明条,还有上一页、下一页两个按钮
		var btn = "</div><div class='btn'>";
		for(var i=0; i < len; i++) {
			var ii = i+1;
			btn += "<span>"+ii+"</span>";
		}
		btn += "</div><div class='preNext pre'>上一页</div><div class='preNext next'>下一页</div>";
		$(slid).append(btn);


      //为小按钮添加鼠标滑入事件,以显示相应的内容
		$(slid+" div.btn span").css("opacity",0.4).mouseenter(function() {
			index = $(slid+" .btn span").index(this);   //index(集合) 返回一个数字索引 表示是第几个  
			showPics(index);
		}).eq(0).trigger("mouseenter");  //注意这里的.eq(0).trigger("mouseenter")是为了在一刷新页面时第一个按钮背景显示为白色

      	//上一页、下一页按钮透明度处理
		$(slid+" .preNext").css("opacity",0.2).hover(function() {
			$(this).stop(true,false).animate({"opacity":"0.5"},300);
		},function() {
			$(this).stop(true,false).animate({"opacity":"0.2"},300);
		});
 

	//上一页按钮    注意索引是从0开始的
		$(slid+" .pre").click(function() {
			index -= 1;
			if(index == -1) {index = len - 1;}
			showPics(index);
		});
	
		//下一页按钮
		$(slid+" .next").click(function() {
			index += 1;
			if(index == len) {index = 0;}
			showPics(index);
		});
	
		//鼠标滑上焦点图时停止自动播放,滑出时开始自动播放
		$(slid).hover(function() {
			clearInterval(picTimer);  
		},function() {
			picTimer = setInterval(function() {  
				showPics(index);
				index++;
				if(index == len) {index = 0;}
			},2500); //此2500代表自动播放的间隔,单位:毫秒
		}).trigger("mouseleave");  //  .trigger("mouseleave")是执行 离开时触发的事件

/*
setInterval()是JS里面的方法
setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
*/
       

      //显示图片函数,根据接收的index值显示相应的内容
		function showPics(index) { //普通切换
			var nowLeft = -index*sWidth; //根据index值计算ul元素的left值
			$(slid+" ul").stop(true,false).animate({"left":nowLeft},1000); //通过animate()调整ul元素滚动到计算出的position
			
			$(slid+" .btn span").stop(true,false).animate({"opacity":"0.4"},1000).eq(index).stop(true,false).animate({"opacity":"1"},1000); //为当前的按钮切换到选中的效果
		      //每次切换前都将所有按钮的opacity属性设置为0.4,然后当前的那个就设置为1   
		      //每次使用animate()前最好清空动画序列
		}
   };

});


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于 JavaScript、CSS 和 HTML 的自动轮播图注释解释每个部分的作用: HTML: ```html <div class="slideshow-container"> <div class="slides"> <img src="image1.jpg"> <img src="image2.jpg"> <img src="image3.jpg"> </div> </div> ``` CSS: ```css .slideshow-container { position: relative; /* 设置相对定位 */ width: 100%; /* 设置宽度 */ height: 300px; /* 设置高度 */ margin: 0 auto; /* 水平居中 */ } .slides { position: relative; /* 设置相对定位 */ width: 100%; /* 设置宽度 */ height: 100%; /* 设置高度 */ overflow: hidden; /* 隐藏溢出部分 */ } .slides img { position: absolute; /* 设置绝对定位 */ top: 0; /* 设置顶部为0 */ left: 0; /* 设置左侧为0 */ width: 100%; /* 设置宽度为100% */ height: 100%; /* 设置高度为100% */ opacity: 0; /* 设置透明度为0 */ transition: opacity 1s ease-in-out; /* 设置过渡效果 */ } .slides img.active { opacity: 1; /* 将当前图片的透明度设置为1,显示出来 */ } ``` JavaScript: ```javascript // 获取所需元素 var slideshowContainer = document.querySelector('.slideshow-container'); var slides = slideshowContainer.querySelector('.slides'); var images = slides.querySelectorAll('img'); // 定义变量 var currentSlideIndex = 0; var slideInterval = setInterval(nextSlide, 2000); // 显示第一张图片 images[currentSlideIndex].classList.add('active'); // 定义 nextSlide 函数 function nextSlide() { // 隐藏当前图片 images[currentSlideIndex].classList.remove('active'); // 更新索引 currentSlideIndex = (currentSlideIndex + 1) % images.length; // 显示下一张图片 images[currentSlideIndex].classList.add('active'); } ``` 这个例子中,我们首先在 HTML 中定义了一个容器 `div` 元素,其中包含了所有的图片。然后在 CSS 中设置了容器和图片的样式,其中图片使用了绝对定位和透明度来实现轮播的效果。最后在 JavaScript 中获取了所需元素,定义了变量和函数,并使用 `setInterval` 函数来自动切换图片。当切换图片时,我们会先隐藏当前的图片,然后更新当前的索引,最后显示下一张图片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值