周末了 找个网页特效练练手

本文介绍了一个图片浏览功能页面的实现过程,包括使用HTML、CSS、JavaScript和C#进行前后端开发的具体步骤。通过异步加载图片并展示大图预览效果。
写在前面的话

作为一个程序员,经常逛博客园是一个非常好的习惯,若周末依然有这个习惯好好发扬哟!似乎园子在星期一到星期五期间比较活跃,到了周六周日冷清了不少,难道大神们都幽会去了?小弟孤身身处上海,寂寞难耐,闲来无事,发此感慨,切勿吐槽!

废话少说,切入正题......

关于具体内容

今天我要完成的是一个图片浏览功能页面,有点类似于百度图片,但又有些不同。下面我以列举的方式写出具体要做的:

要求:

1.页面首次加载 m 张图片,以列表形式展现

2.页面底端给出一个链接,点击链接继续获取紧跟在后面的 n 张图片

3.加载 n 张图片时给出提示,以保证界面友好

4.点击任意一张图片,弹出一个层,显示点击图片的大图,同时其他图片不可用(弹出遮罩)

5.页面首次加载之后不允许有任何刷新

看完这个图片我们该如何下手呢,考虑下下咯!!!

Working

下面列出我们需要做的:

1.HTML页面

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AfterLoad.Default" %>
 2 
 3 <!DOCTYPE html>
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 8     <title></title>
 9     <link href="Styles/Site.css" rel="stylesheet" />
10     <script src="Javascripts/jquery-1.7.1.js"></script>
11     <script src="Javascripts/LoadImage.js"></script>
12 </head>
13 <body>
14     <form id="form1" runat="server">
15         <div class="maincontent">
16             <div id="imageList">
17                 <ul>
18                     <asp:Repeater ID="rptImageList" runat="server">
19                         <ItemTemplate>
20                             <li>
21                                 <img src="<%#Eval("img") %>" />
22                             </li>
23                         </ItemTemplate>
24                     </asp:Repeater>
25                 </ul>
26             </div>
27             <div id="Loading" class="onLoading">获取更多图片信息</div>
28         </div>
29         <div class="detail">
30             <em><img class="close" src="Images/img/close.png" /></em>
31             <img class="detailImg" src="" />
32         </div>
33     </form>
34 </body>
35 </html>
View Code

HTML 页面很简单,没有任何数据,仅给出结构

2.CSS文件

 1 /*通用样式*/
 2 body,div,p,ul,li,span {
 3     margin: 0;
 4     padding: 0;
 5 }
 6 body {
 7     background-color: #20b2aa;
 8 }
 9 .maincontent {
10     width: 1000px;
11     margin: 10px auto;
12     position: relative;
13     z-index: 0;
14 }
15 
16 /*列表布局*/
17 li {
18     list-style: none;
19     width: 240px;
20     height: 160px;
21     float: left;
22     margin: 5px;
23     cursor: pointer;
24 }
25 li img {
26     width: 240px;
27     height: 160px;
28     border: 1px solid #fffff0;
29 }
30 
31 /*加载状态*/
32 .onLoading {
33     cursor: pointer;
34     clear: left;
35     height: 30px;
36     padding: 10px 0 0 435px;
37     color: #fffff0;
38 }
39 
40 /*详细图片,也就是放大后的视图*/
41 .detail {
42     width: 800px;
43     height: 500px;
44     position: fixed;
45     left: 50%;
46     top: 50%;
47     background-color: #778899;
48     margin-left: -400px;
49     margin-top: -250px;
50     border: #fffff0 5px solid;
51     z-index: 100;
52     border-radius: 5px;
53     display: none;
54 }
55 .detailImg {
56     width: 800px;
57     height:500px;
58 }
59 
60 /*弹出层关闭按钮*/
61 .close {
62     width: 40px;
63     height: 40px;
64     position: absolute;
65     right: -15px;
66     top: -15px;
67 }
68 .close:hover {
69     opacity: 0.95;
70 }
View Code

HTML的渲染全部在以上代码

3.Javascript文件

  1 /*
  2  * 图片延时加载与预览
  3  * http://www.cnblogs.com/vchenpeng/
  4  * Date: 2013-9-8 
  5  */
  6 
  7 $(document).ready(function () {
  8     /*------------------可变值Begin------------------*/
  9     var loadCount = 8;   //加载图片数量
 10     var skipCount = 24;  //跳过图片数量
 11     var timer;           //定时器,使看到加载情况
 12     var delay = 5000;    //设定5秒之后加载图片,实际运行尽量减小该值
 13     var index = 2;       //遮罩层的层叠次序,必须保证在图片列表的上面,弹出层的下面,这里是0-100之间
 14     /*------------------可变值 End ------------------*/
 15 
 16     /*异步加载图片*/
 17     function loadImages(lc, sc) {
 18         $.ajax({
 19             url: "Default.aspx/LoadImages",
 20             type: "POST",
 21             data: "{ loadCount:" + lc + ", skipCount:" + sc + " }",
 22             contentType: "application/json; charset=utf-8",
 23             dataType: "json",
 24             beforeSend: function() {
 25                 //loading();
 26             },
 27             error: function () {
 28                 alert("加载失败");
 29             },
 30             success: function (data) {
 31                 if (data != null) {
 32                     $("#imageList ul").append(data.d);
 33                     skipCount += loadCount;
 34                 }
 35             },
 36             complete: function () {
 37                 window.clearInterval(timer);
 38                 $('#Loading').html("获取更多图片信息");
 39             }
 40         });
 41     }
 42 
 43     function vitoc() {
 44         loadImages(loadCount, skipCount);
 45     }
 46 
 47     //事件触发
 48     $('#Loading').click(function () {
 49         $('#Loading').html("图片正在加载,请稍后");
 50         loading();
 51         setTimeout(vitoc, delay);    //为了看到加载期间的过程,此处延时delay秒,真正运行时去掉setTimeout
 52     });
 53     
 54     /*---------------控制标签id为Loading的文字 Begin ---------------*/
 55     function loading() {
 56         var i = -1;
 57         timer=setInterval(function() {
 58             var temp = loadingWord($('#Loading').html(), ".");
 59             i = (i >= 6) ? 0 : ++i;
 60             $('#Loading').html(temp);
 61             if (i == 6) $('#Loading').html("图片正在加载,请稍后");
 62         }, 500);
 63     }
 64 
 65     function loadingWord(baseWord, loadWord) {
 66         var word = baseWord;
 67         word += loadWord;
 68         return word;
 69     }
 70     /*---------------控制标签id为Loading的文字  End  ---------------*/
 71 
 72     $(".close").click(function () {
 73         $(".detail").fadeOut(400);
 74         removeMask();
 75     });
 76 
 77     /*显示图片详细,也就是大图显示*/
 78     var tag = document.getElementById("imageList");
 79     var detail = document.getElementsByClassName("detail")[0];
 80     tag.addEventListener("click", function (e) {
 81         createMask(index);
 82         $(".detail").fadeIn(800);
 83         $(".detailImg").attr("src", e.target.src);
 84     });
 85     
 86     /*双击关闭大图*/
 87     detail.addEventListener("dblclick", function (e) {
 88         $(e.target.parentNode).fadeOut(400);
 89         removeMask();
 90     }, true);
 91 
 92     /*弹出一个遮罩层*/
 93     function createMask(index) {
 94         var layer = document.createElement("div");
 95         layer.id = "layer";
 96         layer.style.width = layer.style.height = "100%";
 97         layer.style.position = "fixed";
 98         layer.style.top = layer.style.left = 0;
 99         layer.style.backgroundColor = "#000";
100         layer.style.zIndex = index;
101         layer.style.opacity = "0.7";
102         document.body.appendChild(layer);
103     }
104     
105     /*消除遮罩层*/
106     function removeMask() {
107         $("#layer")[0].parentNode.removeChild($("#layer")[0]);
108     }
109 });
View Code

此文件最重要了,主要代码在这个文件,可以好好看看咯

4.C#后台代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.IO;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Web;
 7 using System.Web.Services;
 8 
 9 namespace AfterLoad
10 {
11     public partial class Default : System.Web.UI.Page
12     {
13         protected void Page_Load(object sender, EventArgs e)
14         {
15             if (!IsPostBack) LoadImages(24);
16         }
17 
18         /// <summary>
19         /// 页面首次加载
20         /// </summary>
21         /// <param name="loadCount">读取图片数量</param>
22         private void LoadImages(int loadCount)
23         {
24             string path = HttpContext.Current.Server.MapPath("~/Images");
25             string siteRoot = HttpContext.Current.Server.MapPath("~");
26             var imageList = (from images in Directory.GetFiles(path) select new { img = images.Replace(siteRoot, "") }).Take(loadCount).ToList();
27             rptImageList.DataSource = imageList;
28             rptImageList.DataBind();
29         }
30 
31         /// <summary>
32         /// 异步加载图片
33         /// </summary>
34         /// <param name="loadCount">加载图片数量</param>
35         /// <param name="skipCount">忽略图片数量</param>
36         /// <returns></returns>
37         [WebMethod]
38         public static string LoadImages(int loadCount, int skipCount)
39         {
40             string path = HttpContext.Current.Server.MapPath("~/Images");
41             string siteRoot = HttpContext.Current.Server.MapPath("~");
42             var imageList = (from images in Directory.GetFiles(path) select new { img = images.Replace(siteRoot, "") }).Skip(skipCount).Take(loadCount).ToList();
43             StringBuilder sb = new StringBuilder();
44             foreach (var image in imageList)
45             {
46                 string imageSrc = image.img.Replace("\\", "/");
47                 string temp = new Default().SpliceTag(Convert.ToString(imageSrc)).ToString();
48                 sb.AppendFormat(temp);
49             }
50             return sb.ToString();
51         }
52 
53         /// <summary>
54         /// 拼接列表标签
55         /// </summary>
56         /// <param name="imageSrc">图片路径</param>
57         /// <returns></returns>
58         public StringBuilder SpliceTag(string imageSrc)
59         {
60             StringBuilder sb = new StringBuilder();
61             sb.AppendFormat("<li>");
62             sb.AppendFormat(string.Format("<img src='{0}' />", imageSrc));
63             sb.AppendFormat("</li>");
64             return sb;
65         }
66     }
67 }
View Code

后台代码仅两个方法,代码不多

全部完结后,截图

接下来给出我本次运行的截图吧,仅作参考:

1.图片列举

2.3 图片预加载与加载

4.加载完毕

5.图片大图

结语

文中解释性的句子蛮少,但是在代码中有很好的注释,很容易理解,如果还有不理解或者觉得文中有问题的地方,可以给我留言,共同提高,共同进步!文中截图可能无法看到具体的效果,一下提供源码下载

最近上海天气真不咋地,灰蒙蒙的,影响哥心情、、、、、、

------如果你觉得此文对你有所帮助,别忘了点击下右下角的推荐咯,谢谢!------

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制仿真模型展开研究,基于Simulink平台构建了完整的电机控制系统仿真模型,涵盖电机本体建模、坐标变换(如Clark变换与Park变换)、磁场定向控制(FOC)、电流环与速度环的PI调节、空间矢量脉宽调制(SVPWM)等核心技术环节,旨在实现对电机转矩与转速的高精度、动态响应良好的控制。通过系统化仿真验证控制策略的有效性与鲁棒性,深入分析各模块间的信号流向与控制逻辑,为电机驱动系统的设计与优化提供理论依据和技术支撑,是理论联系工程实践的重要桥梁。; 适合人群:具备电机学、电力电子与自动控制基础知识,熟悉Simulink/MATLAB仿真环境,从事电气工程、自动化、新能源车辆、智能制造等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的核心原理与系统架构;②掌握在Simulink中从零开始搭建复杂电机控制系统的方法与技巧;③应用于课程设计、毕业论文、科研项目中的控制算法验证、参数整定与性能优化;④为后续的硬件在环(HIL)测试或实物系统开发奠定仿真基础。; 阅读建议:建议结合经典电机控制理论教材同步学习,注重理论推导与仿真实现的对应关系,动手实践模型搭建、参数调试与波形分析,特别关注PI控制器参数整定对系统稳定性、动态响应速度和抗干扰能力的影响,通过反复仿真迭代加深对控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值