JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本

简介: 原文:JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本一、主页一般都会比较有特色,现在在网站设计(二)实现的基础上,来给主页添加一点动画效果。 1、这里实现的动画效果是:当鼠标悬停在其中某个超链接时,会显示出属于该页面的背景缩略图,让用户知道这个链接的页面大概内容是什么。
原文: JavaScript网站设计实践(三)设计有特色的主页,给主页链接添加JavaScript动画脚本

一、主页一般都会比较有特色,现在在网站设计(二)实现的基础上,来给主页添加一点动画效果。

1、这里实现的动画效果是:当鼠标悬停在其中某个超链接时,会显示出属于该页面的背景缩略图,让用户知道这个链接的页面大概内容是什么。

效果图:

2、实现这个效果的思路

(1)把主页的几个链接的背景图片缩放到150px*150px,拼成一张750*150的图片,并保存为slideshow.png,存放到images文件夹里。

拼成来的图片是这样子的:

(2)写一个JavaScript脚本,用来生成动画效果。

脚本命名为home.js,存放在js文件夹下,并在webDesign.html下调用。

这个动画脚本的功能就是创建显示这个长图的标签,并将这个长图,根据你鼠标所在的连接,修改长图的left和top的属性值,并且实现移动,最后显示出来。

3、具体实现代码

(1)home.js

/********************主页动画脚本实现***********************/
function moveElement(elementID,final_x,final_y,interval){         //参数说明:移动元素的ID,移动的x坐标值,y坐标值,时间
                //向后兼容,判断旧浏览器
                if(!document.getElementById) return false;
                
                if(!document.getElementById(elementID)) return false;
                //获取元素
                var elem = document.getElementById(elementID);
                
                //判断图片是否已经有movement属性
                if(elem.movement){
                    clearTimeout(elem.movement);
                }
                
                //优化:判断left、top属性是否存在并初始化
                if(!elem.style.left){
                    elem.style.left = "0px"
                }
                if(!elem.style.top){
                    elem.style.top = "0px"
                }
                
                var xpos = parseInt(elem.style.left);                
                var ypos = parseInt(elem.style.top);
                //判断元素所在边界
                if(xpos == final_x && ypos == final_y) {
                    return true;
                }
                
                //改进动画效果
                if(xpos >final_x){
                    var dist = Math.ceil(( xpos- final_x)/10);
                    xpos = xpos -dist;
                }
                if(xpos <final_x){
                    var dist = Math.ceil((final_x - xpos)/10);
                    xpos = xpos +dist;
                }
                if(ypos <final_y){
                    var dist = Math.ceil((final_y - ypos)/10);
                    ypos = ypos + dist;
                }
                if(ypos >final_y){
                    var dist = Math.ceil((ypos - final_y)/10);
                    ypos = ypos -dist;
                }
                elem.style.left = xpos+"px";
                elem.style.top = ypos+"px";
                
                //执行moveElement()函数
                var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
                elem.movement = setTimeout(repeat,interval);
}

/****************V2在页面生成动画效果的代码**********************/
function prepareSlideshow(){
    //判断浏览器是否支持

    if(!document.getElementById) return false;
    if(!document.getElementsByTagName) return false;
    
    //判断元素是否存在
    if(!document.getElementById("intro")) return false;
    
    //动态生成html代码
    var intro = document.getElementById("intro");
    var slideshow = document.createElement("div");               //预留退路,如果用户禁掉js,则不出现不该出现的div
    slideshow.setAttribute("id","slideshow");
    
    var preview = document.createElement("img");
    preview.setAttribute("src","./images/slideshow.png");
    preview.style.position = "relative";                        //外部设置的postion获取不到,所以在这里设置
    preview.setAttribute("id","preview");
    slideshow.appendChild(preview);
    insertAfter(slideshow,intro);
    
    //获取元素
    var links = document.getElementsByTagName("a");
    
    for(var i= 0; i<links.length; i++){
        links[i].onmouseover = function(){
            var destination = this.getAttribute("href");
            if(destination.indexOf("webDesign.html") != -1){
                moveElement("preview",0,0,5);
            }
            if(destination.indexOf("about.html") != -1){
                moveElement("preview",-150,0,5);
            }
            if(destination.indexOf("photos.html") != -1){
                moveElement("preview",-300,0,5);
            }
            if(destination.indexOf("live.html") != -1){
                moveElement("preview",-450,0,5);
            }
            if(destination.indexOf("contact.html") != -1){
                moveElement("preview",-600,0,5);
            }
        }
    }
}

addLoadEvent(prepareSlideshow);

 

(2)webDesign.css

往这个文件添加样式

#slideshow{
width: 150px;
height: 150px;
position: relative;
overflow: hidden;
}

(3)在主页的webDesign.html把home.js文件加载进来

<script src="js/home.js"></script>

 

最后,ok啦,现在无论你的鼠标悬停在导航条的任意链接的上方,动画效果就会被触发,跟我们在最前面看到的效果一直,主页的动画脚本完成。

二、学与思

1、不知道如何用FW制作透明图片,于是把本来有frame窗框的图片给忽略了,在这里没有显示出来,就直接显示了图片。

2、关于外部css样式,本来有给动画图片设置了position:relative;  这个属性,但是对这个动画图片没有效果,甚为奇怪,最后还是在home.js文件中,给动画图片添加这个属性,本来应该是会有效果,有点不明白。

3、学习到了大图的相对定位,显示出小图来。通过移动相对定位的left和top属性,再把不要的hidden掉,再给一个动画,让这个图片移动起来即可。

 

目录
相关文章
|
21天前
|
前端开发 JavaScript UED
使用JavaScript实现动画效果
【4月更文挑战第21天】使用JavaScript实现动画效果
28 10
|
2月前
|
缓存 编解码 JavaScript
在JavaScript小游戏开发中,如何优化游戏性能,比如减少重绘、提高动画流畅度?
提升JavaScript游戏性能的关键点包括:使用requestAnimationFrame优化动画流畅度;减少DOM操作,利用DocumentFragment或虚拟DOM;使用Canvas/WebGL高效渲染;优化图像资源,压缩图片和使用雪碧图;分层渲染与视口裁剪减少无效绘制;借助Web Workers进行后台计算;缓存计算结果;合理添加事件监听器并采用事件委托;定期进行性能分析以找到并解决瓶颈。不断测试与调整是优化的关键。
25 4
|
2月前
|
JavaScript 前端开发 测试技术
使用Selenium执行JavaScript脚本:探索Web自动化的新领域
本文介绍了如何在Selenium中使用JavaScript解决自动化测试中的复杂问题。Selenium的`execute_script`函数用于同步执行JS,例如滑动页面、操作时间控件等。在滑动操作示例中,通过JS将页面滚动到底部,点击下一页并获取页面信息。对于只读时间控件,利用JS去除readonly属性并设置新日期。使用JS扩展了Selenium的功能,提高了测试效率和精准度,适用于各种自动化测试场景。
55 1
|
2月前
|
JavaScript 前端开发 Java
liteflow规则引擎 执行Javascript脚本
liteflow规则引擎 执行Javascript脚本
56 1
|
1天前
|
JavaScript 前端开发 NoSQL
【MongoDB 专栏】MongoDB 的 JavaScript 引擎与脚本执行
【5月更文挑战第11天】MongoDB 的 JavaScript 引擎允许在服务器端直接执行脚本,提升效率并实现定制化操作。脚本环境提供独立但与数据库关联的运行空间,引擎负责脚本的解析、编译和执行。执行过程包括脚本提交、解析、编译和执行四个步骤。掌握脚本逻辑设计和 JavaScript 语言特性对于高效利用这一功能至关重要。例如,通过脚本可以计算商品总销售额,增强数据库操作的灵活性。
【MongoDB 专栏】MongoDB 的 JavaScript 引擎与脚本执行
|
12天前
|
JavaScript 前端开发 测试技术
【JavaScript技术专栏】JavaScript模块化开发实践
【4月更文挑战第30天】JavaScript模块化开发缓解了大规模应用的复杂性,通过拆分为独立模块提升代码可维护性、可读性和可测试性。CommonJS在Node.js中用于服务器,而AMD(RequireJS)适合浏览器的异步加载。ES6模块结合两者优点,提供原生支持。实践时遵循单一职责、命名规范和依赖管理等原则,借助Webpack、RequireJS等工具提升效率。模块化是现代JavaScript不可或缺的一部分,促进团队协作和代码复用。
|
12天前
|
JavaScript 前端开发 UED
【JavaScript技术专栏】使用JavaScript实现拖放和动画效果
【4月更文挑战第30天】本文介绍了如何使用JavaScript实现拖放功能和基本动画效果。拖放功能通过监听mousedown、mousemove和mouseup事件,记录元素初始位置并更新其坐标实现。动画效果则利用requestAnimationFrame函数持续改变元素位置,创建平滑移动效果。示例代码包括HTML结构和对应的JavaScript实现。
|
12天前
|
消息中间件 监控 JavaScript
Node.js中的微服务架构:构建与实践
【4月更文挑战第30天】本文探讨了在Node.js中构建微服务的实践,包括定义服务边界、选择框架(如Express、Koa或NestJS)、设计RESTful API、实现服务间通信(HTTP、gRPC、消息队列)、错误处理、服务发现与负载均衡,以及监控和日志记录。微服务架构能提升应用的可伸缩性、灵活性和可维护性。
|
19天前
|
前端开发 JavaScript 容器
JavaScript、CSS像素动画特效代码
此示例创建一个带有像素粒子的容器,每隔300毫秒就会动态添加一个新的像素粒子,然后通过CSS的关键帧动画(`@keyframes`)使它们产生上升和逐渐消失的动画效果。你可以根据需要修改像素粒子的颜色、大小、动画效果和创建速度。
14 0
|
1月前
|
Web App开发 缓存 JavaScript