Ajax无刷新实现图片切换特效

本文介绍了一种使用Ajax实现的无刷新图片切换特效方法。通过预加载图片,并结合JavaScript进行图片切换、播放控制等操作,实现了平滑的图片展示效果。文章提供了完整的代码示例,包括页面代码、Ajax交互及数据库配置。

1.页面cs代码
None.gif using  System;
None.gif
using  System.Data;
None.gif
using  System.Configuration;
None.gif
using  System.Web;
None.gif
using  System.Web.Security;
None.gif
using  System.Web.UI;
None.gif
using  System.Web.UI.WebControls;
None.gif
using  System.Web.UI.WebControls.WebParts;
None.gif
using  System.Web.UI.HtmlControls;
None.gif
using  AjaxPro;
None.gif
None.gif
public  partial  class  _Default : System.Web.UI.Page 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
protected string displayCategoryID;
InBlock.gif    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Utility.RegisterTypeForAjax(
typeof(AjaxMethod));
InBlock.gif        displayCategoryID 
= "17";
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}
2.html代码
None.gif < html  xmlns ="http://www.w3.org/1999/xhtml"   >
None.gif
< head  runat ="server" >
None.gif    
< title > Ajax无刷新实现图片切换特效 </ title >
None.gif    
< link  type ="text/css"  href ="css/tree.css"  rel ="stylesheet" >
None.gif        
< link  type ="text/css"  href ="css/global.css"  rel ="stylesheet" >
None.gif        
< script  type =text/javascript  src =javascript/tree.js ></ script >
None.gif
</ head >
None.gif
< body  onload ="PreloadImage('<%=displayCategoryID %>');" >
None.gif    
< form  id ="form1"  runat ="server" >   
None.gif            
< div  id ="photoarea"  style ="width: 514px; height: 496px; left: 0px; top: 0px;" >
None.gif                
None.gif                
< div  id ="photo"  style ="left: 5px; top: 9px; height: 432px;" >
None.gif                    
< img  id ="slideShow"  src ="images/space.gif"  style ="filter:revealTrans(duration=2,transition=23)" >
None.gif                    
None.gif                
</ div >                 
None.gif                
< div  id ="op"  align ="left"  style ="left: 12px; top: 457px" >
None.gif                    
< span  id ="progress"  style ="FONT-SIZE: 20px" ></ span >
None.gif                    
&nbsp;&nbsp;&nbsp;
None.gif                    
< img  id ="btnPlay"  src ="images/play_bw.gif" >
None.gif                    
< img  id ="btnPause"  src ="images/pause_bw.gif" >
None.gif                    
< img  id ="btnPrev"  src ="images/prev_bw.gif" >
None.gif                    
< img  id ="btnNext"  src ="images/next_bw.gif" >
None.gif                 
</ div >
None.gif            
</ div >
None.gif            
ExpandedBlockStart.gifContractedBlock.gif            
< SCRIPT  type ="text/javascript" > dot.gif
InBlock.gif            
InBlock.gif            
// 定时器
InBlock.gif
            var timeDelay;
InBlock.gif            
InBlock.gif            
// 图片自动浏览时的时间间隔
InBlock.gif
            var timeInterval = 4000;
InBlock.gif            
InBlock.gif            
// Array对象,存储图片文件的路径
InBlock.gif
            var image;
InBlock.gif            
InBlock.gif            
// 当前显示的图片序号
InBlock.gif
            var num;
InBlock.gif            
InBlock.gif            
// 当前浏览状态,该状态用于控制4个按钮的状态
InBlock.gif
            var nStatus;
InBlock.gif            
InBlock.gif            
// 图片显示区域
InBlock.gif
            var slideShow = el("slideShow");
InBlock.gif            
InBlock.gif            
// 图片信息数据表
InBlock.gif
            var dt;
InBlock.gif            
InBlock.gif            
// 预加载图片信息
InBlock.gif
            function PreloadImage(iCategoryID)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// 采用同步调用的方式获取图片的信息                
InBlock.gif
                var ds = AjaxMethod.GetPhotoList(iCategoryID).value;
InBlock.gif                
InBlock.gif                
// 如果返回了结果
InBlock.gif
                if (ds)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
// 判断数据表是否不为空
InBlock.gif
                    if (ds.Tables[0].Rows.length > 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
// 返回的图片信息数据表
InBlock.gif
                        dt = ds.Tables[0];
InBlock.gif                        
InBlock.gif                        
// 用image对象存储图片的文件路径
InBlock.gif
                        image = new Array();
InBlock.gif                        
InBlock.gif                        
// 图片在Photos目录下
InBlock.gif
                        for (var i = 0; i < dt.Rows.length; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            image.push(
"Photos/" + dt.Rows[i].photo_path);
ExpandedSubBlockEnd.gif                        }

InBlock.gif                                    
InBlock.gif                        
// imagePreload对象用于实现图片的预缓存
InBlock.gif
                        var imagePreload = new Array();
InBlock.gif                        
for (var i = 0;i < image.length;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            
// 通过新建Image对象,并将其src属性指向图片的URL
InBlock.gif
                            // 显现图片的预缓存
InBlock.gif
                            imagePreload[i] = new Image();
InBlock.gif                            imagePreload[i].src 
= image[i];
ExpandedSubBlockEnd.gif                        }

InBlock.gif
InBlock.gif                        
// 初始化一些变量
InBlock.gif
                        num = -1;
InBlock.gif                        nStatus 
= 0x09;
InBlock.gif                        
InBlock.gif                        
// 加载第一张图片
InBlock.gif
                        next_image();                
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
else // 分类下没有图片
ExpandedSubBlockStart.gifContractedSubBlock.gif
                    dot.gif{
InBlock.gif                        alert(
"该目录下没有图片!");
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

InBlock.gif                
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
// 实现图片切换时的效果
InBlock.gif
            function image_effects()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// Transition的值为0~23之间的随机数,代表24种切换效果
InBlock.gif
                // 具体值与效果之间的对应见MSDN
InBlock.gif
                slideShow.filters.revealTrans.Transition = Math.random() * 23;
InBlock.gif                
InBlock.gif                
// 应用并播放切换效果
InBlock.gif
                slideShow.filters.revealTrans.apply();
InBlock.gif                slideShow.filters.revealTrans.play();
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
// 切换到上一张图片
InBlock.gif
            function previous_image()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// 图片序号向前移动,如果已经是第一张,则切换到最后一张
InBlock.gif
                num += image.length - 1;
InBlock.gif                num 
%= image.length;
InBlock.gif                
InBlock.gif                
// 图片切换的效果
InBlock.gif
                image_effects();
InBlock.gif                
InBlock.gif                
// 将<img>对象的src属性设置为当前num对应的路径
InBlock.gif
                // 切换图片的显示
InBlock.gif
                slideShow.src = image[num];
InBlock.gif                
InBlock.gif                
// 获取图片的标题、说明信息
InBlock.gif
                getPhotoInfo();
InBlock.gif                
InBlock.gif                
// 设置按钮状态
InBlock.gif
                setBtnStatus();
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
// 切换到下一张图片
InBlock.gif
            function next_image()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// 当前图片的序号向后移动,如果已经是最后一张,
InBlock.gif
                // 则切换到第一张图片
InBlock.gif
                num++;
InBlock.gif                num 
%= image.length;
InBlock.gif                
InBlock.gif                
// 图片的切换效果
InBlock.gif
                image_effects();
InBlock.gif                
InBlock.gif                
// 将<img>对象的src属性设置为当前num对应的路径
InBlock.gif
                // 切换图片的显示
InBlock.gif
                slideShow.src = image[num];
InBlock.gif                
InBlock.gif                
// 获取图片的标题、说明信息
InBlock.gif
                getPhotoInfo();
InBlock.gif                
InBlock.gif                
// 设置按钮状态
InBlock.gif
                setBtnStatus();
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
// 自动浏览图片
InBlock.gif
            function slideshow_automatic()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// 当前图片的序号向后移动,如果已经是最后一张,
InBlock.gif
                // 则切换到第一张图片
InBlock.gif
                num++;
InBlock.gif                num 
%= image.length;
InBlock.gif                
InBlock.gif                
// 图片的切换效果
InBlock.gif
                image_effects();
InBlock.gif                
InBlock.gif                
// <img>对象的src属性设置为当前num指定的URL
InBlock.gif
                // 切换图片的显示
InBlock.gif
                slideShow.src = image[num];
InBlock.gif                
InBlock.gif                
// 获取图片的标题、说明信息
InBlock.gif
                getPhotoInfo();
InBlock.gif                
InBlock.gif                
// 设置按钮的状态,使播放按钮失效,暂停按钮有效
InBlock.gif
                nStatus &= 0x0E;
InBlock.gif                nStatus 
|= 0x02;
InBlock.gif                setBtnStatus();
InBlock.gif                
InBlock.gif                
// slideshow_automatic函数每隔一段时间自动执行
InBlock.gif
                timeDelay = setTimeout("slideshow_automatic()", timeInterval);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
InBlock.gif            
// 停止自动播放
InBlock.gif
            function pauseSlideShow()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// 清除定时器,不再执行slideshow_automatic函数
InBlock.gif
                clearTimeout(timeDelay);
InBlock.gif
InBlock.gif                
// 设置按钮的状态,使播放按钮有效,暂停按钮失效
InBlock.gif
                nStatus &= 0x0d;
InBlock.gif                nStatus 
|= 0x01;
InBlock.gif                setBtnStatus();                
ExpandedSubBlockEnd.gif            }

InBlock.gif            
InBlock.gif            
// 设置按钮的状态:
InBlock.gif
            // 判断的依据是当前是否处于自动播放的状态
InBlock.gif
            // 以及当前显示的图片是否第一张或最后一张图片
InBlock.gif
            function setBtnStatus(bDir)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// 如果是第一张图片
InBlock.gif
                if (num == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
// 向前切换图片的按钮失效
InBlock.gif
                    nStatus &= 0x0b;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
InBlock.gif                
// 如果是最后一张图片
InBlock.gif
                if (num == (image.length - 1))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
// 向后切换图片的按钮失效
InBlock.gif
                    nStatus &= 0x07;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
InBlock.gif                
// 如果既不是最后一张,也不是第一张图片
InBlock.gif
                if (num != 0 && num !=(image.length - 1))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
// 向前、向后切换图片的按钮均有效
InBlock.gif
                    nStatus |= 0x0c;
ExpandedSubBlockEnd.gif                }

InBlock.gif            
InBlock.gif                
// 根据nStatus每一位的值确定4个按钮的背景图
InBlock.gif
                el("btnPlay").src = ((nStatus & 0x01== 0x01?
InBlock.gif                    
"images/play.gif" : "images/play_bw.gif";
InBlock.gif                el(
"btnPause").src = ((nStatus & 0x02== 0x02?
InBlock.gif                    
"images/pause.gif" : "images/pause_bw.gif";
InBlock.gif                el(
"btnPrev").src = ((nStatus & 0x04== 0x04?
InBlock.gif                    
"images/prev.gif" : "images/prev_bw.gif";
InBlock.gif                el(
"btnNext").src = ((nStatus & 0x08== 0x08?
InBlock.gif                    
"images/next.gif" : "images/next_bw.gif";
InBlock.gif
InBlock.gif                
// 根据nStatus每一位的值确定鼠标移动到4个按钮上方时的形状
InBlock.gif
                el("btnPlay").style.cursor = ((nStatus & 0x01== 0x01?
InBlock.gif                    
"pointer" : "default";
InBlock.gif                el(
"btnPause").style.cursor = ((nStatus & 0x02== 0x02?
InBlock.gif                    
"pointer" : "default";
InBlock.gif                el(
"btnPrev").style.cursor = ((nStatus & 0x04== 0x04?
InBlock.gif                    
"pointer" : "default";
InBlock.gif                el(
"btnNext").style.cursor = ((nStatus & 0x08== 0x08?
InBlock.gif                    
"pointer" : "default";
InBlock.gif
InBlock.gif                
// 根据nStatus的每一位确定4个按钮是否具有onclick响应
InBlock.gif
                el("btnPlay").onclick = ((nStatus & 0x01== 0x01?
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
function() dot.gif{slideshow_automatic();} : function() dot.gif{return false;};
InBlock.gif                el(
"btnPause").onclick = ((nStatus & 0x02== 0x02?
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
function() dot.gif{pauseSlideShow();} : function() dot.gif{return false;};
InBlock.gif                el(
"btnPrev").onclick = ((nStatus & 0x04== 0x04?
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
function() dot.gif{previous_image();} : function() dot.gif{return false;};
InBlock.gif                el(
"btnNext").onclick = ((nStatus & 0x08== 0x08?
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
function() dot.gif{next_image();} : function() dot.gif{return false;};
InBlock.gif                
InBlock.gif                
// 显示当前图片浏览的进度
InBlock.gif
                el("progress").innerHTML = (num + 1+ " / " + image.length;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
InBlock.gif            
// 获取图片的标题、说明信息
InBlock.gif
            function getPhotoInfo()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return;
InBlock.gif                
// 图片ID号
InBlock.gif
                var id = dt.Rows[num].id;
InBlock.gif                
InBlock.gif                
// 如果存在
InBlock.gif
                if (id)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
// 异步调用Ajax方法GetPhotoInfo
InBlock.gif
                    AjaxMethod.GetPhotoInfo(id, GetPhotoInfo_callback);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
InBlock.gif            
// 回调函数,根据响应的内容显示标题和说明信息
InBlock.gif
            function GetPhotoInfo_callback(response)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
// 获取图片的信息
InBlock.gif
                var dt_photo = response.value.Tables[0];
InBlock.gif                
InBlock.gif                
// 如果图片存在
InBlock.gif
                if (dt_photo.Rows.length > 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
// 显示图片的标题和说明
InBlock.gif
                    el("title").innerHTML = dt_photo.Rows[0].photo_title;
InBlock.gif                    el(
"description").innerHTML = dt_photo.Rows[0].photo_description;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }
            
ExpandedBlockEnd.gif            
</ SCRIPT >
None.gif    
</ form >
None.gif
</ body >
None.gif
</ html >
3.AjaxMethod类
None.gif using  System;
None.gif
using  System.Data;
None.gif
using  System.Configuration;
None.gif
using  System.Web;
None.gif
using  System.Web.Security;
None.gif
using  System.Web.UI;
None.gif
using  System.Web.UI.WebControls;
None.gif
using  System.Web.UI.WebControls.WebParts;
None.gif
using  System.Web.UI.HtmlControls;
None.gif
using  System.Data.SqlClient;
None.gif
using  AjaxPro;
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**/ /// <summary>
InBlock.gif
/// Summary description for AjaxMethod
ExpandedBlockEnd.gif
/// </summary>

None.gif public   class  AjaxMethod
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
public AjaxMethod()
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//
InBlock.gif        
// TODO: Add constructor logic here
InBlock.gif        
//
ExpandedSubBlockEnd.gif
    }

InBlock.gif    
public static string ConnectionString = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif    
GetDataSet#region GetDataSet
InBlock.gif    
public static DataSet GetDataSet(string sql)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        SqlDataAdapter sda 
= new SqlDataAdapter(sql, ConnectionString);
InBlock.gif        DataSet ds 
= new DataSet();
InBlock.gif        sda.Fill(ds);
InBlock.gif        
if (ds != null)
InBlock.gif            
return ds;
InBlock.gif        
else
InBlock.gif            
return null;
ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif    
#endregion

InBlock.gif    
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 获取某个分类下图片的id和photo_path信息
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="iCategoryID">分类ID号</param>
ExpandedSubBlockEnd.gif    
/// <returns>图片信息(id, photo_path)的信息</returns>

InBlock.gif    [AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
InBlock.gif    
public static DataSet GetPhotoList(int iCategoryID)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
string sql = string.Format("SELECT id, photo_path FROM Photo WHERE photo_category_id = {0}", iCategoryID);
InBlock.gif        
return GetDataSet(sql);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// 获取图片信息(标题、说明)
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="id">图片id</param>
ExpandedSubBlockEnd.gif    
/// <returns>图片信息</returns>

InBlock.gif    [AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
InBlock.gif    
public static DataSet GetPhotoInfo(int id)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
string sql = string.Format("SELECT photo_title, photo_description FROM Photo WHERE id = {0}", id);
InBlock.gif
InBlock.gif        
return GetDataSet(sql);
ExpandedSubBlockEnd.gif    }

InBlock.gif    
ExpandedBlockEnd.gif}
4.Web.config
None.gif <? xml version="1.0" ?>
None.gif
< configuration >
None.gif  
< appSettings >
None.gif    
< add  key ="ConnectionString"  value ="Data Source=localhost;user id=sa;password=sa;initial catalog=DB" />
None.gif  
</ appSettings >
None.gif    
< connectionStrings />
None.gif    
< system .web >
None.gif      
< httpHandlers >
None.gif        
< add  verb ="POST,GET"  path ="ajaxpro/*.ashx"  type ="AjaxPro.AjaxHandlerFactory, AjaxPro" />
None.gif      
</ httpHandlers >        
None.gif        
< compilation  debug ="false"   />         
None.gif        
< authentication  mode ="Windows"   />         
None.gif    
</ system.web >
None.gif
</ configuration >
5.sql脚本
None.gif if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[Photo] ' and   OBJECTPROPERTY (id, N ' IsUserTable ' =   1 )
None.gif
drop   table   [ dbo ] . [ Photo ]
None.gif
GO
None.gif
None.gif
CREATE   TABLE   [ dbo ] . [ Photo ]  (
None.gif    
[ id ]   [ int ]   IDENTITY  ( 1 1 NOT   NULL  ,
None.gif    
[ photo_title ]   [ varchar ]  ( 128 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
None.gif    
[ photo_description ]   [ text ]  COLLATE Chinese_PRC_CI_AS  NULL  ,
None.gif    
[ photo_category_id ]   [ int ]   NULL  ,
None.gif    
[ photo_path ]   [ varchar ]  ( 255 ) COLLATE Chinese_PRC_CI_AS  NULL  
None.gif
ON   [ PRIMARY ]  TEXTIMAGE_ON  [ PRIMARY ]
None.gif
GO
6.原代码 /Files/singlepine/AjaxChangeImage.rar

转载于:https://www.cnblogs.com/savageworld/archive/2006/09/04/494498.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值