84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 优化后的banner.js
 | ||
| (function () {
 | ||
|     // 设置innerHTML
 | ||
|     function setInnerHTML(el, html) {
 | ||
|         if (el) el.innerHTML = html;
 | ||
|     }
 | ||
| 
 | ||
|     // AJAX GET请求
 | ||
|     function ajaxGet(url, callback, errorCallback) {
 | ||
|         var xhr = new XMLHttpRequest();
 | ||
|         xhr.open('GET', url, true);
 | ||
|         xhr.onreadystatechange = function () {
 | ||
|             if (xhr.readyState === 4) {
 | ||
|                 if (xhr.status === 200) {
 | ||
|                     try {
 | ||
|                         var res = JSON.parse(xhr.responseText);
 | ||
|                         callback(res);
 | ||
|                     } catch (e) {
 | ||
|                         console.error('JSON解析失败', e);
 | ||
|                         if (errorCallback) errorCallback(e);
 | ||
|                     }
 | ||
|                 } else {
 | ||
|                     console.error('请求失败', xhr.status);
 | ||
|                     if (errorCallback) errorCallback(xhr.status);
 | ||
|                 }
 | ||
|             }
 | ||
|         };
 | ||
|         xhr.send();
 | ||
|     }
 | ||
| 
 | ||
|     // 渲染banner
 | ||
|     function renderBanner(bannerList) {
 | ||
|         var bannerHtml = '';
 | ||
|         bannerList.forEach(function (banner) {
 | ||
|             bannerHtml += '<div>' +
 | ||
|                 '<div class="banner-content">' +
 | ||
|                 '<div class="banner-image">' +
 | ||
|                 '<img src="' + banner.image + '" alt="' + (banner.title || '') + '">' +
 | ||
|                 '</div>' +
 | ||
|                 '<div class="banner-text">' +
 | ||
|                 '<span class="banner-title">' + (banner.title || '') + '</span>' +
 | ||
|                 '<span class="banner-desc">' + (banner.desc || '') + '</span>' +
 | ||
|                 '<a href="' + (banner.url || 'javascript:;') + '" class="banner-slide">' +
 | ||
|                 '<span class="banner-btn">查看详情</span>' +
 | ||
|                 '</a>' +
 | ||
|                 '</div>' +
 | ||
|                 '</div>' +
 | ||
|                 '</div>';
 | ||
|         });
 | ||
|         var carouselItem = document.querySelector('#test10 div[carousel-item]');
 | ||
|         setInnerHTML(carouselItem, bannerHtml);
 | ||
|     }
 | ||
| 
 | ||
|     // 主流程
 | ||
|     ajaxGet('/index/index/bannerlist', function (res) {
 | ||
|         // console.log('banner接口返回:', res);
 | ||
|         if (res && res.code === 1 && Array.isArray(res.banner)) {
 | ||
|             renderBanner(res.banner);
 | ||
| 
 | ||
|             // 确保layui和carousel已加载
 | ||
|             if (window.layui) {
 | ||
|                 layui.use(['carousel'], function () {
 | ||
|                     var carousel = layui.carousel;
 | ||
|                     carousel.render({
 | ||
|                         elem: '#test10',
 | ||
|                         width: '100%',
 | ||
|                         height: '100vh',
 | ||
|                         interval: 4000,
 | ||
|                         anim: 'fade',
 | ||
|                         autoplay: true,
 | ||
|                         full: false,
 | ||
|                         arrow: 'hover'
 | ||
|                     });
 | ||
|                 });
 | ||
|             } else {
 | ||
|                 console.error('layui未加载');
 | ||
|             }
 | ||
|         } else {
 | ||
|             console.error('banner数据异常', res);
 | ||
|         }
 | ||
|     }, function (err) {
 | ||
|         console.error('banner数据请求失败', err);
 | ||
|     });
 | ||
| })(); |