25、DHTML 实用技巧与示例

DHTML 实用技巧与示例

1. 引言

在了解了 CSS 的基本工作原理后,我们可以深入探索 DHTML(动态 HTML)代码,为网页增添更多动态和交互性。DHTML 结合了 CSS 和 JavaScript,能让网页实现许多独特的效果,如元素拖动、数字时钟显示、水印背景等。本文将介绍多个 DHTML 的实用示例,帮助你为网页打造更丰富的用户体验。

2. DHTML 代码使用说明

我们将展示由 dynamicdrive.com 提供的几个 DHTML 示例,你可以从他们的网站获取代码,无需手动重新输入。部分示例代码会直接给出,让你了解如何应用 DHTML 实现特殊效果;其他示例仅作展示,代码过长未全部列出,但会提供 dynamicdrive.com 上的 URL,你可复制粘贴到自己的网页中。

需要注意的是,使用 dynamicdrive.com 网站上的 DHTML 代码片段时,务必遵循其说明,将代码插入到 HTML 文档的正确位置,否则代码可能无法正常工作。

3. 通用拖动效果

3.1 效果介绍

通用拖动示例允许访客通过拖动对象到新位置来重新排列网页上的对象。通过定义 drag 类,任何类型的对象,如图像、文本和按钮,都可以被拖动。

3.2 操作步骤

  1. 将 <style> 块复制到网页的 <head> 标签中。
  2. 将 drag 类名分配给你希望用户在屏幕上重新排列的对象标签的 class 属性。

3.3 示例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Dragging Elements</title>
   <style>
   <!--
      .drag{position:relative;cursor:hand}
   -->
   </style>
   <script language="JavaScript1.2">
   <!--
      //Generic Drag Script- © Dynamic Drive (www.dynamicdrive.com)
      //For full source code and terms of usage, visit http://www.dynamicdrive.com
      var ie=document.all
      var ns6=document.getElementById&&!document.all
      var dragapproved=false
      var z,x,y
      function move(e){
         if (dragapproved){
            z.style.left=ns6? temp1+e.clientX-x: temp1+event.clientX-x
            z.style.top=ns6? temp2+e.clientY-y : temp2+event.clientY-y
            return false
        }
      }
      function drags(e){
         if (!ie&&!ns6)
            return
         var fi redobj=ns6? e.target : event.srcElement
         var topelement=ns6? "HTML" : "BODY"
         while (fi redobj.tagName!=topelement&&fi redobj.className!= "drag"){
           fi redobj=ns6? fi redobj.parentNode : fi redobj.parentElement
        }
        if (fi redobj.className=="drag"){
           dragapproved=true
           z=fi redobj
           temp1=parseInt(z.style.left+0)
           temp2=parseInt(z.style.top+0)
           x=ns6? e.clientX: event.clientX
           y=ns6? e.clientY: event.clientY
           document.onmousemove=move
           return false
       }
     }
     document.onmousedown=drags
     document.onmouseup=new Function("dragapproved=false")
     //-->
   </script>
</head>
<body>
   <img src="test.gif" class="drag">
   <div class="drag"> <b> Text </b></div>
   <input  type="button" value="Help" class="drag">
</body>
</html>

3.4 流程图

graph TD;
    A[鼠标按下] --> B{是否为 drag 类对象};
    B -- 是 --> C[允许拖动];
    B -- 否 --> D[不处理];
    C --> E[鼠标移动];
    E --> F[更新对象位置];
    G[鼠标松开] --> H[停止拖动];

4. LCD 数字时钟

4.1 效果介绍

你可以使用 DHTML 在网页上添加一个外观和功能都与真实数字时钟相同的数字时钟,并且它能显示正确的时间。

4.2 代码说明

此示例同时使用了类和 ID。类用于赋予时钟数字时钟的外观和感觉,ID 用于在网页上唯一标识时钟。JavaScript 代码会确定正确的时间,并使用 ID 让时钟显示时间。

4.3 示例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Digital Clock</title>
   <style>
   <!--
   .styling{
      background-color:black;
      color:lime;
      font: bold 15px MS Sans Serif;
      padding: 3px;
   }
   -->
   </style>
</head>
<body>
   <span id="digitalclock" class="styling"></span>
   <script>
   <!--
      /*****************************************
      * LCD Clock script- by Javascriptkit.com
      * Featured on/available at http://www.dynamicdrive.com/
      * This notice must stay intact for use
      *****************************************/
      var alternate=0
      var standardbrowser=!document.all &!document.getElementById
      if (standardbrowser)
         document.write('<form name="tick"><input type="text" name="tock" size="6"></form>')
      function show(){
         if (!standardbrowser)
            var clockobj= document.getElementById? document.getElementById("digitalclock") : document.all.digitalclock
         var Digital=new Date()
         var hours=Digital.getHours()
         var minutes=Digital.getMinutes()
         var dn="AM"
         if (hours==12) dn="PM"
         if (hours>12){
              dn="PM"
              hours=hours-12
           }
           if (hours==0) hours=12
             if (hours.toString().length==1)
           hours="0"+hours
           if (minutes<=9)
              minutes="0"+minutes
           if (standardbrowser){
              if (alternate==0)
               document.tick.tock.value=hours+ " : "+minutes+" "+dn
           else
              document.tick.tock.value=hours+ "   "+minutes+" "+dn
         }
         else{
           if (alternate==0)
             clockobj.innerHTML=hours+ "<font color='lime'>&nbsp;:&nbsp;</font>"+ minutes+ " "+"<sup style='font-size:1px'>"+dn+"</sup>"
          else
             clockobj.innerHTML=hours+"<font color='black'>&nbsp;:&nbsp;</font>"+minutes+" "+"<sup style='font-size:1px'>"+dn+"</sup>"
         }
         alternate=(alternate==0)? 1 : 0
         setTimeout("show()",1000)
      }
      window.onload=show
   //-->
   </script>
</body>
</html>

4.4 时间更新流程

步骤 操作
1 页面加载时调用 show 函数
2 获取当前时间
3 格式化小时和分钟
4 根据浏览器类型更新时钟显示
5 每秒调用一次 show 函数更新时间

5. 水印背景图像

5.1 效果介绍

通过在网页上添加个人水印,可以让网页看起来更有档次。水印是一个模糊的图像,它会出现在网页上其他内容的后面,并且在页面滚动时保持位置不变。

5.2 操作步骤

将 notebook.jpg 替换为你想要用作水印的其他图像,该图像将作为网页的背景显示。

5.3 示例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Watermark</title>
</head>
<body>
   <script language="JavaScript1.2">
   <!--
      /*
         Watermark Background Image Script- © Dynamic Drive (www.dynamicdrive.com)
         For full source code, 100's more DHTML scripts, and TOS, visit dynamicdrive.com
     */
     if (document.all||document.getElementById)
        document.body.style.background="url('notebook.jpg') white center no-repeat fi xed"
   //-->
   </script>
</body>
</html>

6. 使用 iframe 的标签式文档查看器

6.1 效果介绍

如果你的网站需要访客快速在多个网页之间切换,这个 DHTML 示例很适合你。它允许访客通过使用始终显示在网页顶部的标签来导航多个网页。

6.2 操作原理

导航标签位于链接网页的上方,网页内容会根据访客选择的标签而改变。每个标签都与另一个网页的 URL 相关联。使用 iframe 构建网页, iframe 类似于框架,但可以在窗口内使用,而不是用于分割窗口。

6.3 示例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Tabbed Document Viewer</title>
   <style type="text/css">
      /*Eric Meyer's based CSS tab*/
      #tablist{
         padding: 3px 0;
         margin-left: 0;
         margin-bottom: 0;
         margin-top: 0.1em;
         font: bold 12px Verdana;
      }
      #tablist li{
         list-style: none;
         display: inline;
         margin: 0;
      }
      #tablist li a{
         text-decoration: none;
         padding: 3px 0.5em;
         margin-left: 3px;
         border: 1px solid #778;
         border-bottom: none;
         background: white;
      }
      #tablist li a:link, #tablist li a:visited{
        color: navy;
      }
      #tablist li a:hover{
         color: #000000;
         background: #C1C1FF;
         border-color: #227;
      }
      #tablist li a.current{
         background: lightyellow;
      }
   </style>
   <script type="text/javascript">
   <!--
      /***********************************************
      * Tabbed Document Viewer script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
      * This notice MUST stay intact for legal use
      * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
      ***********************************************/
      var selectedtablink=""
      var tcischecked=false
      function handlelink(aobject){
         selectedtablink=aobject.href
         tcischecked=(document.tabcontrol && document.tabcontrol.tabcheck.checked)? true : false
         if (document.getElementById && !tcischecked){
            var tabobj=document.getElementById("tablist")
            var tabobjlinks=tabobj.getElementsByTagName("A")
            for (i=0; i<tabobjlinks.length; i++)
               tabobjlinks[i].className=""
            aobject.className="current"
            document.getElementById("tabiframe").src=selectedtablink
            return false
        }
        else
          return true
      }
      function handleview(){
         tcischecked=document.tabcontrol.tabcheck.checked
         if (document.getElementById && tcischecked){
            if (selectedtablink!="")
               window.location=selectedtablink
         }
      }
   //-->
   </script>
</head>
<body>
   <ul id="tablist">
      <li><a class="current" href="http://www.google.com" onClick="return handlelink(this)">Google</a></li>
      <li><a href="http://www.yahoo.com" onClick="return handlelink(this)">Yahoo</a></li>
      <li><a href="http://www.msn.com" onClick="return handlelink(this)">MSN</a></li>
      <li><a href="http://www.news.com" onClick="return handlelink(this)">News.com</a></li>
      <li><a href="http://www.dynamicdrive.com" onClick="return handlelink(this)">Dynamic Drive</a></li>
   </ul>
   <iframe id="tabiframe" src="http://www.google.com" width="98%" height="350px">
   </iframe>
   <form name="tabcontrol" style="margin-top:0">
      <input name="tabcheck" type="checkbox" onClick="handleview()"> Open tab links in browser window instead.
   </form>
</body>
</html>

6.4 标签切换流程图

graph TD;
    A[点击标签] --> B{是否勾选复选框};
    B -- 是 --> C[在浏览器窗口打开链接];
    B -- 否 --> D[更新 iframe 内容];
    D --> E[更新标签样式];

7. 每日 iframe 内容

7.1 效果介绍

某些应用程序要求网页上显示的消息根据星期几每天更改。通过使用这个 DHTML 示例,可以轻松实现这一功能。

7.2 操作原理

使用 iframe 划出网页上显示消息的区域。消息包含在分配给 daycontent 数组的几个网页之一中。JavaScript 从系统时钟获取当前日期,根据日期选择要显示的消息。

7.3 示例代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>New Daily Message</title>
</head>
<body>
   <script type="text/javascript">
   <!--
      /***********************************************
      * Daily iframe content II- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
      * This notice MUST stay intact for legal use
      * Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
      ***********************************************/
      var ie=document.all
      var dom=document.getElementById
      //Specify IFRAME display attributes
      var iframeprops='width=150 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="1" scrolling="no"'
      //Specify 31 URLs to display inside iframe, one for each day of the current month
      //If this month has less than 31 days, the last few URLs won't be used.
      var daycontent=new Array()
      daycontent[1]="1.htm"
      daycontent[2]="2.htm"
      daycontent[3]="3.htm"
      daycontent[4]="4.htm"
      daycontent[5]="5.htm"
      daycontent[6]="6.htm"
      daycontent[7]="7.htm"
      daycontent[8]="8.htm"
      daycontent[9]="9.htm"
      daycontent[10]="10.htm"
      daycontent[11]="11.htm"
      daycontent[12]="12.htm"
      daycontent[13]="13.htm"
      daycontent[14]="14.htm"
      daycontent[15]="15.htm"
      daycontent[16]="16.htm"
      daycontent[17]="17.htm"
      daycontent[18]="18.htm"
      daycontent[19]="19.htm"
      daycontent[20]="20.htm"
      daycontent[21]="21.htm"
      daycontent[22]="22.htm"
      daycontent[23]="23.htm"
      daycontent[24]="24.htm"
      daycontent[25]="25.htm"
      daycontent[26]="26.htm"
      daycontent[27]="27.htm"
      daycontent[28]="28.htm"
      daycontent[29]="29.htm"
      daycontent[30]="30.htm"
      daycontent[31]="31.htm"
      //No need to edit after here
      if (ie||dom)
         document.write('<iframe id="dynstuff" src="" '+iframeprops+'></iframe>')
      var mydate=new Date()
      var mytoday=mydate.getDate()
      function dayofmonth_iframe(){
         if (ie||dom){
            var iframeobj=document.getElementById? document.getElementById("dynstuff") : document.all.dynstuff
            iframeobj.src=daycontent[mytoday]
        }
      }
      window.onload=dayofmonth_iframe
   //-->
   </script>
</body>
</html>

7.4 每日消息显示流程

步骤 操作
1 页面加载时获取当前日期
2 根据日期从 daycontent 数组中选择 URL
3 将选择的 URL 赋值给 iframe 的 src 属性

8. 跨浏览器跑马灯

8.1 效果介绍

当网页上有太多内容时,图像和信息往往无法与访客有效沟通。通过在页面上滚动滚动消息(有时称为跨浏览器跑马灯),可以让部分信息脱颖而出。跑马灯可以放置在网页的任何位置。

8.2 获取代码

你可以在 dynamicdrive.com 网站上找到跑马灯代码: www.dynamicdrive.com/dynamicindex2/cmarquee.htm

9. 弹出式日历

9.1 效果介绍

要求访客在网页上输入日期时,由于可以使用多种不同的日期格式,这可能会很困难。Sev Kotchney 设计了一种简单的方法,让访客从弹出式日历中选择日期,然后将日期填充到表单的日期字段中。

9.2 获取代码

Kotchney 的弹出式日历代码可在 www.dynamicdrive.com/dynamicindex6/popcalendar.htm 获取。

10. 下降式内容框

10.1 效果介绍

让网页消息传达给访客的最佳方式之一是在网页加载后将消息下降显示出来。消息会一直显示在屏幕上,直到访客确认消息。

10.2 获取代码

dynamicdrive.com 网站上有一个巧妙的下降式消息框的 DHTML 代码: www.dynamicdrive.com/dynamicindex17/dropinbox.htm

11. 广告框

11.1 效果介绍

除了广告商,没有人喜欢在页面加载时覆盖整个网页的广告。Matt Gabbert 开发了一个 DHTML 广告框代码,这个广告框在网页加载五次中显示一次,显示 10 秒后让位于网页内容,相对比较友好。

11.2 获取代码

你可以在 www.dynamicdrive.com/dynamicindex11/dhtmlad.htm 找到这个广告框的 JavaScript 代码。

12. 常见问题解答

12.1 问题列表

问题 答案
DHTML 是否结合了 CSS 和 JavaScript? True
使用 DHTML 可以做什么? a. 放置对象在屏幕的绝对位置;b. 在不同层显示对象;c. 不重新加载页面更改内容;d. 以上所有
DHTML 的标准在哪个 HTML 版本中定义? None of the above
类定义以什么开头? Period
ID 以什么开头? Pound sign
如何应用类? Assigning the class name to the class attribute
DHTML 是否取代 JavaScript? False
DHTML 能否使网页像包含多媒体产品功能的桌面应用程序一样工作? True
类定义中是否包含规则? True
类在哪个标签中定义?

相关推荐

37、Java Web开发:DHTML抽象与国际化支持

本文探讨了Java Web开发中DHTML的抽象方法与国际化支持的关键技术。通过使用自定义标签,开发者可以简化复杂的DHTML代码,提高可维护性和开发效率。同时,详细介绍了国际化开发中的编码选择、资源文件管理、动态语言切换及测试验证,帮助构建支持多语言的Web应用。文中提供了Servlet和JSP在处理非ISO-8859-1编码的操作流程,并结合示例代码和最佳实践,指导开发者构建高效、易用的国际化Web应用。

sea99的博客 112

MIPS-5级流水线CPU

一、流水线CPU 流水线CPU就是指将一条分解为多步,在同一周期内进行多条指令的同时执行。MIPS五级流水线就是将指令分为:取指(IF),译码(ID),执行(EX),访存(MEM),写回(WB)五个阶段。举个例子: 比如第二条指令lui $t2,0x2100 在流水线CPU中执行的就是 可以看到在200-300ns的周期里,IF阶段取到0x00400004处的指令,300-400ns,这条指令到了ID阶段,而IF阶段执行下一条指令。400-500ns,执行这条指令,ALU的结果为0x2100

weixin_43877853的博客 2万+

SillyTavern 向量存储配置踩坑记:从卡死到本地部署 Ollama 跑通

用此命令看到镜像就算成功。

qq_62483451的博客 1259

Android自动化新方案:ESP32-C3蓝牙HID模拟触控与手势操作实战(附源码)

本文详细介绍了使用ESP32-C3通过蓝牙HID协议实现Android设备自动化操作的完整方案。该硬件方案成本低廉且能完美规避系统风控,可模拟鼠标移动、点击及复杂手势操作,延迟低于50毫秒,适用于游戏连招和应用测试等场景。文章包含完整的源码实现和性能优化技巧。

kotlin6android的博客 377

实战分享:如何用Jetson Nano+HM30图传搭建低空YOLOv5检测系统(附VNC避坑指南)

本文详细介绍了如何利用Jetson Nano和HM30图传搭建低空YOLOv5检测系统,重点解决了无人机应用中的硬件连接和VNC延迟优化问题。通过对比WiFi直连与图传方案的优劣,提供了网络配置、VNC优化及YOLOv5模型加速的实战技巧,帮助开发者实现高效稳定的低空目标检测系统。

weixin_29174385的博客 110

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 450

【YOLOv8改进-损失函数】 YOLOv8自带损失函数CIoU / DIoU / GIoU 详解,以及如何切换损失函数

在介绍YOLOv8中的各种Iou之前,我们先来了解了解目标检测中的损失函数。目标检测模型通常包含两类损失函数:类别损失(分类)和位置损失(回归)。这两类损失函数用于检测模型的最后一部分,根据模型的输出(类别和位置)以及实际标注框(类别和位置),分别计算类别损失和位置损失。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 5190

B站评论情感分析实战:Python批量爬取+BERT正负向分类,精准度92%(附完整代码)

用技术手段自动化挖掘用户真实情感,比人工分析更高效、更客观。这套方案的精度能稳定在90%左右,完全满足实际应用需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1026

芒果YOLO11改进145:Loss损失函数KLD:即插即用 NeurIPS顶会论文,独家首发原创新颖|通过 Kullback-Leibler 散度学习用于目标检测的高精度边界框

旋转检测Loss损失函数KLD:即插即用 NeurIPS顶会论文,独家首发原创新颖|通过 Kullback-Leibler 散度学习用于目标检测的高精度边界框

包括YOLOv5、YOLOv7、YOLOv8等模型改进 566

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 26、深入解析报表服务:渲染、缓存与订阅的高效运用
下一篇: 4、量子系统的数学表述与相关概念解析
backprop5master
博客等级 码龄1天 0粉丝 1813原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值