也实现一个首页图片幻灯效果

2024-02-21 23:20

本文主要是介绍也实现一个首页图片幻灯效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前几天,在园子里看了一个图片幻灯效果,很不错,不过今天想找却找不到了。这两天想把网站的图片幻灯效果给换了,原来的虽然做成了web控件,不过控件里硬编码了javascript和css,甚至还有document.write这样的输出,感觉很是不爽。偶然发现了一篇翻译文章如何使用 JavaScript 创建可维护的幻灯片效果,感觉原作者在构建可分离的javascript和css上颇有心得,原文的效果http://www.planabc.net/demo/slideshow/。












不过这里和我想要的效果还有些差异,参照大部分国内网站的实现方式,应该能够实现定时的播放,同时在右下角还应该有一个序列号的指示,就像新浪网的首页那样,既然作者帮我们作了大部分的分离工作,剩下的这部分自己实现,也十分简单。
下面给出代码,在代码中我会把新加入的部分作出说明

tools.js
/**//* helper methods */
tools 
= {
    addEvent:
function( obj, type, fn ) {
        
if ( obj.attachEvent ) {
         obj[
'e'+type+fn] = fn;
         obj[type
+fn] = function(){obj['e'+type+fn]( window.event );}
         obj.attachEvent( 
'on'+type, obj[type+fn] );
        }
 else
         obj.addEventListener( type, fn, 
false );
    }
,
    removeClass:
function(o,c){
        
var rep=o.className.match(' '+c)?' '+c:c;
        o.className
=o.className.replace(rep,'');
    }
,
    addClass:
function(o,c){
        
var test = new RegExp("(^|\\s)" + c + "(\\s|$)").test(o.className);
        
if(!test){o.className+=o.className?' '+c:c;}
    }
,
    cancelClick:
function(e){
        
if (window.event){
            window.event.cancelBubble 
= true;
            window.event.returnValue 
= false;
        }

        
if (e && e.stopPropagation && e.preventDefault){
            e.stopPropagation();
            e.preventDefault();
        }

    }

}


addEvent的使用是为了避免IE的this指向总是window,而用obj[type+fn] = function(){obj['e'+type+fn]( window.event );}保证正确的this指向。
addClass注意看是利用正则防止加入重复的classname,比如classname="tb js",这种写法是同时应用了两个class,如果利用addClass在加入js时,程序自动判断不再更新classname。
cancelClick,主要是把IE的returnValue设为false,把Dom的preventDefault设为false,防止a tag的href转向再起作用,我们这里只是需要其执行脚本

slideshow-css.js
var slideshowcss = {
    
    
/**//*
        These are the classes and IDs used in the slideshow function.
        You can change any of them here. Please make sure to use 
        quotation marks around the names and end all but the last 
        one with a comma.
    
*/

  
  showID               :
'slides',    
  dynamicClass         :
'js',
  slideNavigationClass :
'slidenav',
  currentClass         :
'current'

}


给出了一些全局的配置。

slideshow.js
var slideshow = {
    current:
0,
    timeHandle:
0,
    init:
function(){
        
if(document.getElementById && document.createTextNode){
            
var list = document.getElementById(slideshowcss.showID);
            
if(list){
                slideshow.items 
= list.getElementsByTagName('li');
                slideshow.all 
= slideshow.items.length;
                
if(slideshow.all > 1){
                    tools.addClass(list, slideshowcss.dynamicClass);
                    slideshow.createNav(list);
                }

            }

            tools.addClass(slideshow.items[slideshow.current], slideshowcss.currentClass);
            slideshow.timeHandle
=setInterval('slideshow.circle()',2000);
        }

    }
,
    
    createHerf:
function(i){
       
var a = document.createElement('a');
       a.setAttribute(
'href','#');
       
//basil 2008-07-04 数组从0开始,但页面指示应该从1开始,注意区分
       var templabel = document.createTextNode(parseInt(i)+1);
        a.appendChild(templabel);
        tools.addClass(a, 
'axx');    
        tools.addEvent(a, 
'click', slideshow.showImage);    
        
return a;
    }
,
    createNav:
function(o){
        
var p = document.createElement('div');
        tools.addClass(p, slideshowcss.slideNavigationClass);

        slideshow.links
=[];
        
for(var i=0;i<slideshow.all;i++)
        
{
        slideshow.links[i]
=slideshow.createHerf(i);
        p.appendChild(slideshow.links[i]);
        }

        o.parentNode.appendChild(p);
    }
,
    circle:
function(){
        
for(var i=0;i<slideshow.all;i++)
            
{
            tools.removeClass(slideshow.items[i], slideshowcss.currentClass);
            tools.removeClass(slideshow.links[i], 
'bxx');    
            }

        
// alert("from circle "+slideshow.current);
        // alert(slideshow.all);
        slideshow.current=parseInt(slideshow.current)+1;
        
if(slideshow.current > slideshow.all-1){
                slideshow.current 
= 0;
        }

        tools.addClass(slideshow.items[slideshow.current], slideshowcss.currentClass);  
        tools.addClass(slideshow.links[slideshow.current], 
'bxx');    
        
//tools.addClass(slideshow.links[slideshow.current], 'bxx');    
    }
,
    showImage:
function(e){
        
//alert(typeof (this.innerHTML)!='undefined');
        
        
if(typeof (this.innerHTML)!='undefined')
        
{
            
//basil 2008-07-04 数组从0开始,但页面指示应该从1开始,注意区分
            slideshow.current=this.innerHTML-1;
            
//tools.removeClass(slideshow.links[this.innerHTML], 'bxx');
            for(var i=0;i<slideshow.all;i++)
            
{
            tools.removeClass(slideshow.items[i], slideshowcss.currentClass);
            
//tools.addClass(slideshow.links[i], 'axx');
            tools.removeClass(slideshow.links[i], 'bxx');    
            }

            
//alert(this.innerHTML);
            
            tools.addClass(slideshow.items[slideshow.current], slideshowcss.currentClass);
            tools.addClass(slideshow.links[slideshow.current], 
'bxx');    
            
//tools.addClass(slideshow.links[slideshow.current], 'bxx');    
            clearInterval(slideshow.timeHandle);
            slideshow.timeHandle
=setInterval('slideshow.circle()',2000);
            tools.cancelClick(e);
        }

        
    }

}

tools.addEvent(window,
'load',slideshow.init);


加入了一个circle定时,没有点击时,每两秒切换下一幅,同时新增的数字指示切换到相应的序号,这个也是通过给a tag附加不同的css来完成的。

 

slideshow.css
#slides.js{}{
    width
:200px;
    border
:1px solid #999;
    padding
:5px;
    background
:#fff;
    margin
:0 0 10px 0;
    color
:#000;
}

.slidenav
{}{
   width
:210px;
   border-right
: 0px; 
   border-top
: 0px; 
   z-index
: 4000; 
   background
: #888888; 
   filter
: alpha(style=1,opacity=10,finishopacity=90); 
   margin
: 1px;
   border-left
: 0px; 
   padding-top
: 1px;
   border-bottom
: 0px; 
   position
: relative; 
   top
: -25px; 
   height
: 14px; 
   text-align
: right
}

.slidenav a
{}{
     text-decoration
:none;
     color
:#fff;
     line-height
:12px;
     font
:9px sans-serif;
     display
:inline;
     padding
:1px 7px;
     border-left
:#cccccc 1px solid;

}

a.axx:link,a.axx:visited
{}{
 background-color
:#666;
}

a.axx:active,a.axx:hover
{}{
 background-color
:#999;
}

a.bxx:link,a.bxx:visited
{}{
 background-color
:#009900;
}

a.bxx:active,a.bxx:hover
{}{
 background-color
:#ff9900;
}

.slidenav span
{}{
    padding
:0 1em;
    color
:#000;
}

#slides.js img
{}{
    display
:block;
    margin
:0 auto;
}

#slides.js li
{}{
    display
:none;
    padding
:0;
    margin
:0;
}

#slides.js li.current
{}{
    display
:block;
}


slide.html
<!DOCTYPE html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
<meta name="Keywords" content="简单的XHTML页面" />
    
<meta name="Description" content="这是一个简单的XHTML页面" />
    
<title>简单的XHTML页面</title>
    
<link rel="stylesheet" type="text/css" href="slideshow.css" >

        
<script type="text/javascript" language="javascript" src="tools.js" ></script>
        
<!--    <script type="text/javascript" language="javascript" src="slideshow-labels.js" ></script>-->
            
<script type="text/javascript" language="javascript" src="slideshow-css.js" ></script>
    
<script type="text/javascript" language="javascript" src="slideshow.js" ></script>

    
    
</head>
<body>
<!--
<ul id="slidelinks">
    <li><span>/News/ShowPost.aspx?postid=1069</span></li>
    <li><span>/News/ShowPost.aspx?postid=1064</span></li>
    <li><span>/News/ShowPost.aspx?postid=1067</span></li>
</ul>
<ul id="slidetitles">
    <li><span>推进信息化与工业化融合 走新型工业化道路</span></li>
    <li><span>第四届信博会9月举行 打造国际IT品牌展会</span></li>
    <li><span>贯彻实施《山东省信息化促进条例》座谈会在济南召开王军民出席会议并讲话</span></li>
</ul>
-->
<ul id="slides">
    
<li><img src="img/1.jpg" alt="Hallway" /></li>
    
<li><img src="img/2.jpg" alt="Hob" /></li>
    
<li><img src="img/3.jpg" alt="Bathroom" /></li>
    
<!--    <li><img src="img/4.jpg" alt="Hob" /></li>
    <li><img src="img/5.jpg" alt="Bathroom" /></li>
-->
</ul>
</body>

</html>


效果图

源代码下载

这篇关于也实现一个首页图片幻灯效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/733405

相关文章

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统