posts - 23, comments - 67, trackbacks - 19, articles - 28
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

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

Posted on 2006-09-19 17:04 wander 阅读(8094) 评论(29)  编辑 收藏 网摘
一、AjaxMethod
using System;
using System.Data;
using System.Data.SqlClient;

namespace AjaxImage
{
    
/// <summary>
    
/// AjaxMethod 的摘要说明。
    
/// </summary>

    public class AjaxMethod
    
{
        
public AjaxMethod()
        
{            
        }

        
public static string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"].ToString();

        
GetDataSet

        [AjaxPro.AjaxMethod]
        
public static DataSet GetPhotoList( int iCategoryID )
        
{
            
string sql = "Select id,photo_path FROM Photo where photo_category_id=" + iCategoryID ;
            
return GetDataSet( sql );
        }

        [AjaxPro.AjaxMethod]
        
public static DataSet GetPhotoInfo( int id )
        
{
            
string sql = string.Format("SELECT photo_title, photo_description FROM Photo WHERE id = {0}", id);
            
return GetDataSet( sql );
        }


    }
//end class
}


二、页面HTML代码:
<div id="Layer1" style="Z-INDEX:1; LEFT:104px; WIDTH:501px; POSITION:absolute; TOP:28px; HEIGHT:345px">
                
<img name="slideShow" src="images/space.gif" width="500" height="300" style="FILTER:revealTrans(duration=2,transition=23)">
            
</div>
            
<div id="Layer2" style="Z-INDEX:2; LEFT:490px; WIDTH:112px; POSITION:absolute; TOP:380px; HEIGHT:26px">
                
<img id="btnPlay" src="images/play_bw.gif" onclick="slideshow_automatic()" onmouseover="this.src='images/play.gif'"
                    onmouseout
="this.src='images/play_bw.gif'"> <img id="btnPause" src="images/pause_bw.gif" onclick="pauseSlideShow()" onmouseover="this.src='images/pause.gif'"
                    onmouseout
="this.src='images/pause_bw.gif'"> <img id="btnPrev" src="images/prev_bw.gif" onclick="previous_image()" onmouseover="this.src='images/prev.gif'"
                    onmouseout
="this.src='images/prev_bw.gif'"> <img id="btnNext" src="images/next_bw.gif" onclick="next_image()" onmouseover="this.src='images/next.gif';next_image()"
                    onmouseout
="this.src='images/next_bw.gif'">
            
</div>

三、JAVASCRIPT:
<script language="javascript" type="text/javascript">
            
// 定时器
            var timeDelay;
            
            
// 图片自动浏览时的时间间隔
            var timeInterval = 4000;
            
            
// Array对象,存储图片文件的路径
            var image;
            
            
// 当前显示的图片序号
            var num;
            
            
// 图片信息数据表
            var dt;
            
// 预加载图片信息
            function PreloadImage(iCategoryID)
            
{
                
// 采用同步调用的方式获取图片的信息                
                var ds = AjaxImage.AjaxMethod.GetPhotoList(iCategoryID).value;
                
                
// 如果返回了结果
                if (ds)
                
{
                    
// 判断数据表是否不为空
                    if (ds.Tables[0].Rows.length > 0)
                    
{
                        
// 返回的图片信息数据表
                        dt = ds.Tables[0];
                        
                        
// 用image对象存储图片的文件路径
                        image = new Array();
                        
                        
// 图片在Photos目录下
                        for (var i = 0; i < dt.Rows.length; i++)
                        
{
                            image[i] 
= "Photos/" + dt.Rows[i].photo_path;
                        }

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


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

                    
else // 分类下没有图片
                    {
                        alert(
"该目录下没有图片!");
                    }

                }
                
            }

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

            
function next_image()
            
{
                
// 当前图片的序号向后移动,如果已经是最后一张,
                // 则切换到第一张图片
                num++;
                num 
%= image.length;
                
                
// 图片的切换效果
                image_effects();
                
                
// 将<img>对象的src属性设置为当前num对应的路径
                // 切换图片的显示
                document.slideShow.src = image[num];                
            }

            
function previous_image()
            
{
                
// 当前图片的序号向后移动,如果已经是最后一张,
                // 则切换到第一张图片
                num += image.length - 1;
                num 
%= image.length;
                
                
// 图片的切换效果
                image_effects();
                
                
// 将<img>对象的src属性设置为当前num对应的路径
                // 切换图片的显示
                document.slideShow.src = image[num];                                
            
            }

            
function slideshow_automatic()
            
{
                
// 当前图片的序号向后移动,如果已经是最后一张,
                // 则切换到第一张图片
                num ++;
                num 
%= image.length;
                
                
// 图片的切换效果
                image_effects();
                
                
// 将<img>对象的src属性设置为当前num对应的路径
                // 切换图片的显示
                document.slideShow.src = image[num];
                timeDelay 
= setTimeout( "slideshow_automatic()",timeInterval );                
            }

            
// 停止自动播放
            function pauseSlideShow()
            
{
                
// 清除定时器,不再执行slideshow_automatic函数
                clearTimeout(timeDelay);
            }

        
</script>

四、在主页面的ONLOAD事件里面添加:

      onload="PreloadImage('2')"

五、WebConfig添加:
       <system.web>
       <httpHandlers>
            <add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro" />
     </httpHandlers>

      <configuration>
       <appSettings>
           <add key="ConnectionString" value="server=127.0.0.1;database=test;uid=sa;pwd=dfdf" /> 
       </appSettings>   
六、数据库脚本:
      
CREATE TABLE [Photo] (
    
[id] [int] IDENTITY (11NOT NULL ,
    
[photo_title] [varchar] (128) COLLATE Chinese_PRC_CI_AS NULL ,
    
[photo_description] [text] COLLATE Chinese_PRC_CI_AS NULL ,
    
[photo_category_id] [int] NULL ,
    
[photo_path] [varchar] (255) COLLATE Chinese_PRC_CI_AS NULL 
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Feedback

#1楼    回复  引用  查看    

2006-09-19 17:22 by 亦续缘      
真是太棒了!刚好要用到这个技术!谢了!:)

#2楼    回复  引用  查看    

2006-09-19 18:40 by 等鹰的鱼      
请问一下 [AjaxPro.AjaxMethod] 是什么

#3楼    回复  引用  查看    

2006-09-19 19:34 by aspnetx      
ajaxpro?

#4楼    回复  引用    

2006-09-19 19:41 by anikin [未注册用户]
书上抄的吧

#5楼    回复  引用  查看    

2006-09-19 19:48 by 七年之痒      
同问

#6楼    回复  引用  查看    

2006-09-19 21:58 by 壮志      
有没有显示的效果看一下

#7楼    回复  引用    

2006-09-19 22:44 by Lioner [未注册用户]
用Atlas实现更简单!

#8楼    回复  引用  查看    

2006-09-20 10:28 by Bear.sTaR{R}      
直接用javasript也很简单啊,只要pageload的时候把所有要显示的图片的路径加载到客户端就行了,数据量也很小!!!

#9楼    回复  引用    

2006-09-20 12:44 by SR[匿名] [未注册用户]
用Atlas吧,别折腾了。

#10楼    回复  引用    

2006-09-20 13:01 by sion [未注册用户]
不同的场合有不同的方案,讨论就好了. 没必要说别人的不好吧. 如果是.Net Framework1.1呢,怎么用Atlas?如果图片是要根据后台数据动态加载呢,如果有多个页面,但各页面所要调用的图片不一样呢?JavaScript+Page_Load是不是就比Ajax好?

#11楼    回复  引用  查看    

2006-09-20 15:37 by 编程农民工      
楼上说的是。觉得atlas有效率问题。等Atlas成熟后在开始学。

http://www.cnblogs.com/luanwey/articles/509391.html

#12楼    回复  引用    

2006-09-23 09:07 by 东方一杰[匿名] [未注册用户]
支持,有整个源码吗

#13楼    回复  引用    

2008-06-20 11:58 by 风的记忆 [未注册用户]
你好:研究一上午了还是不行.

总是报告 phototest.AjaxMethod为空或是不存在.
phototest是我的项目名字(namespace).
能否指点一下.

或是发我邮箱.在此先谢谢了.

#14楼    回复  引用  查看    

2008-10-21 23:45 by cloudgamer      
http://www.cnblogs.com/cloudgamer/archive/2008/05/23/1205642.html
试试这个效果

#15楼    回复  引用    

2008-10-31 13:52 by 方法 [未注册用户]
OnLoad”是一个“方法组”,无法为它赋值

#16楼    回复  引用  查看    

2009-06-01 23:34 by ForA      
同问:OnLoad”是一个“方法组”,无法为它赋值
这个应该怎么做?谢谢了。

发表评论



姓名 [登录] [注册] 
主页
Email (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

相关链接: