如何设计页面固定广告的效果
来源:互联网 发布:1688和淘宝的区别 编辑:程序博客网 时间:2024/04/29 08:24
转自:http://www.cnblogs.com/dennisit/archive/2013/03/20/2971969.html
处于盈利的需要,很多网页上都会放置文字或图片广告,固定位置的广告出现在页面固定的位置,在用户拖动滚动条浏览网页的过程中,广告会根据页面滚动的位置自动调整,保持出现在用户的视野内.
接下来介绍如何设计该种效果
固定广告的设计思路
1.广告的设计
因为希望广告放置于页面特定的位置中,所以应该通过CSS广告元素的布局方式为绝对布局方式(position:absolute),具体做法是将广告图片与关闭广告的文字放入一个div层中.在通过css指定层的样式.
2.事件的处理
单击广告内容,进行相应的页面跳转
/*单击触发的事件*/
function adOnClick(){
window.location.href=http://www.cnblogs.com/dennisit/;
}
单击广告关闭按钮,执行层获取,样式隐藏,使用divobj.innerHTML=””,进行广告销毁
function adClosed(){
var ad = document.getElementById("ad");
//隐藏层,并清空层中的内容
ad.style.display="none";
ad.innerHTML="";
}
3.广告位置固定
使用Javascript进行事件监听操作,因为要监听的是窗体滚动事件,所以应对window对象添加onscroll事件.为了让广告保持在页面可视范围中的固定位置,
广告的纵坐标应该为:广告距离页面上端的相对距离+垂直滚动条滚动距离.
广告的横坐标应该为:广告距离页面左端的相对距离+水平滚动条滚动距离.
可以通过document.body的scrollTop属性获取垂直滚动条的滚动距离,通过document.body的scrollLeft属性获取水平滚动条的滚动距离.
为了视觉上的动态效果,使用window对象的setTimeout方法定时进行移动.每次移动坐标距离的1/5.
//记录widow.setTimeout定时操作的句柄
var timeHandler;
window.onscroll = function() {
//如果上一次的移动效果还未完成则终止
if (timeHandler) window.clearTimeout(timeHandler);
var ad = document.getElementById('ad');
/*
#ad中的相应属性值 left:10px; top:90px;
*/
var oldX = ad.offsetLeft; //获取广告的当前位置
var oldY = ad.offsetTop; //获取广告的当前位置
var targetX = 10 + document.body.scrollLeft; //计算出希望移动到的新位置
var targetY = 90 + document.body.scrollTop; //计算出希望移动到的新位置
//开始移动效果
move(oldX,oldY,targetX,targetY);
}
function move(oldX,oldY,targetX,targetY) {
var isMove = false; //是否需要移动
var ad = document.getElementById('ad');
//Y方向的判断
//判断是否已经接近了目标位置
if (oldY + (targetY - oldY) / 5 >= targetY) {
//如果已经接近了目标职位,将图片移动到目标位置
ad.style.top = targetY;
//释放句柄引用
timeHandler = null;
} else {
//如果远离目标位置,每次移动相距距离的1/5
oldY += (targetY - oldY) / 5;
ad.style.top = oldY;
isMove = true; //需要移动
}
//X方向判断
//判断是否已经接近了目标位置
if (oldX + (targetX - oldX) / 5 >= targetX) {
//如果已经接近了目标职位,将图片移动到目标位置
ad.style.left = targetX;
//释放句柄引用
timeHandler = null;
} else {
//如果远离目标位置,每次移动相距距离的1/5
oldX += (targetX - oldX) / 5;
ad.style.left = oldX;
isMove = true; //需要移动
}
//0.05秒后进行下一次移动
if(isMove){
timeHandler = window.setTimeout('move(' + oldX + ', ' + oldY + ',' + targetX + ', ' + targetY + ')', 50);
}
}
4.特殊处理
当用户拖动滚动条时,如果上一次的移动距离效果还没有完成,则需要终止上一次的移动,从当前的位置开始新的移动效果.否则会出现连续拖动滚动条后广告图片抖动的不良效果.
效果图:
完整代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<title>固定位置的广告</title>
<style>
/*用来模拟大页面,使页面出现垂直和水平滚动条*/
#container{
width:2000px;
height:800px;
background-color:#E6EEF9;
}
#ad{
position:absolute;
left:10px;
top:90px;
width:116px;
height:190px;
background-color:#eee;
font-size:12px;
}
.adtitle{
width:116px;
height:25px;
line-height:25px;
text-align:center;
color:white;
background-color:#C80901;
padding:0px;
}
.adcontent{
width:116px;
height:142px;
cursor:pointer;
padding:0px;
margin:0px;
}
.adclose{
padding:0px;
text-align:center;
width:116px;
height:25px;
line-height:25px;
background-color:#3E3E3E;
cursor:pointer;
}
</style>
<script>
//记录widow.setTimeout定时操作的句柄
var timeHandler;
window.onscroll = function() {
//如果上一次的移动效果还未完成则终止
if (timeHandler) window.clearTimeout(timeHandler);
var ad = document.getElementById('ad');
/*
#ad中的相应属性值 left:10px; top:90px;
*/
var oldX = ad.offsetLeft; //获取广告的当前位置
var oldY = ad.offsetTop; //获取广告的当前位置
var targetX = 10 + document.body.scrollLeft; //计算出希望移动到的新位置
var targetY = 90 + document.body.scrollTop; //计算出希望移动到的新位置
//开始移动效果
move(oldX,oldY,targetX,targetY);
}
function move(oldX,oldY,targetX,targetY) {
var isMove = false; //是否需要移动
var ad = document.getElementById('ad');
//Y方向的判断
//判断是否已经接近了目标位置
if (oldY + (targetY - oldY) / 5 >= targetY) {
//如果已经接近了目标职位,将图片移动到目标位置
ad.style.top = targetY;
//释放句柄引用
timeHandler = null;
} else {
//如果远离目标位置,每次移动相距距离的1/5
oldY += (targetY - oldY) / 5;
ad.style.top = oldY;
isMove = true; //需要移动
}
//X方向判断
//判断是否已经接近了目标位置
if (oldX + (targetX - oldX) / 5 >= targetX) {
//如果已经接近了目标职位,将图片移动到目标位置
ad.style.left = targetX;
//释放句柄引用
timeHandler = null;
} else {
//如果远离目标位置,每次移动相距距离的1/5
oldX += (targetX - oldX) / 5;
ad.style.left = oldX;
isMove = true; //需要移动
}
//0.05秒后进行下一次移动
if(isMove){
timeHandler = window.setTimeout('move(' + oldX + ', ' + oldY + ',' + targetX + ', ' + targetY + ')', 50);
}
}
/*单击触发的事件*/
function adOnClick(){
window.location.href="http://www.cnblogs.com/dennisit/";
}
/*关闭触发的事件*/
function adClosed(){
var ad = document.getElementById("ad");
//隐藏层,并清空层中的内容
ad.style.display="none";
ad.innerHTML="";
}
</script>
</head>
<body>
<div id="ad">
<div class="adtitle">广告标题</div>
<div class="adcontent">
<img src="images/info.png" onClick="adOnClick()"/>
</div>
<div class="adclose" onClick="adClosed()">关闭</div>
</div>
<div id="container">
</div>
</body>
</html>
- 如何设计页面固定广告的效果
- 页面2侧固定广告
- 固定定位实现滚动广告效果
- 菜单固定 页面滚动 效果
- 如何统计广告投放效果
- InfoQ的广告效果
- 对联效果的广告
- 缓冲效果的广告
- 广告的效果
- 如何打开一个固定大小的页面? (转)
- 如何让Html页面的导航固定在浏览器顶部
- HTML中 css实现滚动页面时固定页面其中一栏的效果
- 如何固定div在页面顶端,并且当下面的div滑动的时候,添加阴影效果,如同百度搜索一样
- Jquery,css如何创建一个悬浮的广告页面?
- 如何自动评测广告内容与页面内容的相关性
- 页面两侧对联广告代码效果
- 页面右下角弹出广告效果(二)
- 页面右下角弹出广告效果(一)
- IOS 调用打电话,发信息,email功能
- EL表达式
- POJ--1655--Balancing Act--简单树形DP
- 设计模式之Factory模式
- 内排序(1)插入排序:直接插入和shell排序
- 如何设计页面固定广告的效果
- How to stop linux sendmail service
- android sdk, adt等的下载
- UITableView上拉与下拉刷新
- Kerberos 工作原理
- jeecg2.0-beta的oracle+weblogic测试
- javascript数组元素的添加、删除与插入以及参数数组的使用
- jeecg v2.0 中增加自己的部门功能
- db设计