最近做项目时,公司要在Ext的ToolBar中添加个滚动公告栏,不但要向上滚动,而且可以向左滚动。滚动方向可以由用户选择。
以下是在Ext平台下运行的,UICtrl.StatusBarNoNotice 返回个TextItem。可以直接添加到Toolbar的Items中,进行测试。
UICtrl.StatusBarNoNotice = function() {
var noticeArray = [];
// [id,title]
noticeArray.push(["100", "部门周例会会议通知1"]);
noticeArray.push(["200", "部门周例会会议通知2"]);
noticeArray.push(["300", "部门周例会会议通知3"]);
noticeArray.push(["400", "部门周例会会议通知4"]);
noticeArray.push(["500", "部门周例会会议通知5"]);
var total = noticeArray.length;// 公告数量
// 公告栏
var noticeTxt = new Ext.Toolbar.TextItem({
id : 'noticeTxt',
text : noticeArray[0][1]
});
if (noticeArray.length == 0)
noticeArray.push(["-1", "今天没有公告"]);
/***************************************************************************
* 公告栏 start
*/
var marqueeInterval = new Array();
var marqueeId = 0;
var marqueeDelay = 3000;// 停顿时间 (ms)
var marqueeHeight = 16; // 公告栏高度
var marqueeWidth = 300;// 公告栏宽度
var dir = Sys.agentInfo.noticeScrollDir;// 滚动方向up/left up为向上滚动,left为向左滚动
var separator = " ● ";
if (dir == "left")
leafscroll();
else
upscroll();
/**
* 向左滚动
*/
function leafscroll() {
var str = "";
if (noticeArray[0][0] == "-1")
return;
for (var i = 0; i < noticeArray.length; i++) {
str += separator;
var item = '<a onclick="new UICtrl.ShowNoNotice('
+ String(noticeArray[i][0]) + ')" style="cursor:pointer;">'
+ noticeArray[i][1] + '</a>';
str += item;
}
noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'
+ marqueeHeight
+ 'px;width:'
+ marqueeWidth
+ 'px;"><div style="float:left;width: 800%;"><div id="notice1" style="float:left;">'
+ str + '</div><div id="notice2" style="float:left;">' + str
+ '</div></div></div>';
if (document.getElementById("noticeTxt")) {
var noticeText = document.getElementById("noticeTxt");
noticeText.innerHTML = noticeDiv;
} else
noticeTxt.text = noticeDiv;
var mytask = new Ext.TaskMgr.start({
run : function() {
var noticeText = document.getElementById("noticeTxt");
// noticeText.innerHTML = noticeDiv;
var dir1 = Sys.agentInfo.noticeScrollDir;
if (dir1 == "up") {
noticeText.innerHTML = "";
Ext.TaskMgr.stop(mytask);
upscroll();
return;
}
var marqueeBox = document.getElementById("marqueeBox");
var notice1 = document.getElementById("notice1");
var notice2 = document.getElementById("notice2");
if (notice2.offsetWidth - marqueeBox.scrollLeft <= 0)
marqueeBox.scrollLeft -= notice1.offsetWidth
else {
marqueeBox.scrollLeft++;
}
marqueeBox.onmouseover = function() {
Ext.TaskMgr.stop(mytask);
};
marqueeBox.onmouseout = function() {
Ext.TaskMgr.start(mytask);
};
},
interval : 10
});
}
/**
* 向上滚动
*/
function upscroll() {
var str = "<a onclick='javascript:new UICtrl.ShowNoNotice("
+ noticeArray[0][0] + ");' style='cursor:pointer;'>"
+ noticeArray[0][1] + "</a>";
if (noticeArray[0][0] == "-1")
str = noticeArray[0][1];
else
marqueeId++;
noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'
+ marqueeHeight + 'px;width:' + marqueeWidth + 'px;"><div>'
+ str + '</div></div>';
if (document.getElementById("noticeTxt")) {
var noticeText = document.getElementById("noticeTxt");
noticeText.innerHTML = noticeDiv;
} else
noticeTxt.text = noticeDiv;
marqueeInterval[0] = new Ext.TaskMgr.start({
run : function() {
var dir1 = Sys.agentInfo.noticeScrollDir;
var noticeText = document.getElementById("noticeTxt");
if (dir1 == "left") {
noticeText.innerHTML = "";
Ext.TaskMgr.stop(marqueeInterval[0]);
Ext.TaskMgr.stop(marqueeInterval[1]);
leafscroll();
return;
}
var marqueeBox = document.getElementById("marqueeBox");
if (noticeArray[marqueeId])
var str = "<a onclick='javascript:new UICtrl.ShowNoNotice("
+ noticeArray[marqueeId][0]
+ ");' style='cursor:pointer;'>"
+ noticeArray[marqueeId][1] + "</a>";
if (noticeArray[0][0] == "-1")
str = noticeArray[0][1];
marqueeId++;
if (marqueeId >= noticeArray.length)
marqueeId = 0;
if (marqueeBox.childNodes.length == 1) {
var nextLine = document.createElement('DIV');
nextLine.innerHTML = str;
nextLine.style.width = marqueeWidth;
marqueeBox.appendChild(nextLine);
} else {
marqueeBox.childNodes[0].innerHTML = str;
marqueeBox.appendChild(marqueeBox.childNodes[0]);
marqueeBox.scrollTop = 0;
}
marqueeBox.onmouseover = function() {
Ext.TaskMgr.stop(marqueeInterval[0])
}
marqueeBox.onmouseout = function() {
Ext.TaskMgr.start(marqueeInterval[0]);
}
// /marqueeBox.onclick = function() {
// /new UICtrl.ShowNoNotice();
// /}
if (marqueeInterval[1])
Ext.TaskMgr.stop(marqueeInterval[1]);
marqueeInterval[1] = new Ext.TaskMgr.start({
run : function() {
var marqueeBox = document.getElementById("marqueeBox");
marqueeBox.scrollTop++;
if (marqueeBox.scrollTop % marqueeHeight == (marqueeHeight - 1)) {
Ext.TaskMgr.stop(marqueeInterval[1]);
}
},
interval : 20
});
},
interval : 3000
});
}
return [noticeTxt];
}
今天下班没有什么干,于是将上面的Ext的滚动公告功能做了一些修改。做成一个纯JS的版本。
以下是js的版本代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>滚动公告(横向/纵向)</title>
</head>
<body style="margin: 5px;">
<div>
<button onclick="left()">横向滚动</button>
<button onclick="up()">纵向滚动</button>
</div>
<div id="noticeBar">notice</div>
<hr>
<script type="text/javascript" language="javascript">
var noticeArray = [];
//[id,title]
noticeArray.push( [ "100", "部门周例会会议通知1" ]);
noticeArray.push( [ "200", "部门周例会会议通知2" ]);
noticeArray.push( [ "300", "部门周例会会议通知3" ]);
noticeArray.push( [ "400", "部门周例会会议通知4" ]);
noticeArray.push( [ "500", "部门周例会会议通知5" ]);
var total = noticeArray.length;// 公告数量
if (noticeArray.length == 0)
noticeArray.push( [ "-1", "今天没有公告" ]);
/*******************************************************************************
* 公告栏 start
*/
var marqueeInterval = new Array();
var marqueeId = 0;
var marqueeDelay = 3000;// 停顿时间 (ms)
var marqueeHeight = 16; // 公告栏高度
var marqueeWidth = 300;// 公告栏宽度
var dir = 'left';// 滚动方向up/left up为向上滚动,left为向左滚动
var separator = " <font color='#999999'>●</font> ";
if (dir == "left")
leafscroll();
else
upscroll();
/**
* 向左滚动
*/
function leafscroll() {
var str = "";
if (noticeArray[0][0] == "-1")
return;
for ( var i = 0; i < noticeArray.length; i++) {
str += separator;
var item = '<a onclick="alert(' + String(noticeArray[i][0])
+ ')" style="cursor:pointer;">' + noticeArray[i][1] + '</a>';
str += item;
}
noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'
+ marqueeHeight
+ 'px;width:'
+ marqueeWidth
+ 'px;margin:5px;border:2px solid #1d953f;font-size:12px;color:red;"><div style="float:left;width: 800%;"><div id="notice1" style="float:left;">'
+ str + '</div><div id="notice2" style="float:left;">' + str
+ '</div></div></div>';
var noticeBar = document.getElementById("noticeBar");
noticeBar.innerHTML = noticeDiv
marqueeInterval[3] = window.setInterval(LeftStartFn, 10);
function LeftStartFn() {
if (dir == "up") {
noticeBar.innerHTML = "";
window.clearInterval(marqueeInterval[3]);
upscroll();
return;
}
var marqueeBox = document.getElementById("marqueeBox");
var notice1 = document.getElementById("notice1");
var notice2 = document.getElementById("notice2");
if (notice2.offsetWidth - marqueeBox.scrollLeft <= 0)
marqueeBox.scrollLeft -= notice1.offsetWidth
else {
marqueeBox.scrollLeft++;
}
marqueeBox.onmouseover = function() {
window.clearInterval(marqueeInterval[3])
};
marqueeBox.onmouseout = function() {
marqueeInterval[3] = window.setInterval(LeftStartFn, 10)
};
}
}
function upscroll() {
var str = "<a onclick='javascript:new UICtrl.ShowNoNotice("
+ noticeArray[0][0] + ");' style='cursor:pointer;'>"
+ noticeArray[0][1] + "</a>";
if (noticeArray[0][0] == "-1")
str = noticeArray[0][1];
else
marqueeId++;
noticeDiv = '<div id="marqueeBox" style="overflow:hidden;height:'
+ marqueeHeight
+ 'px;width:'
+ marqueeWidth
+ 'px;margin:5px;border:2px solid #1d953f;font-size:12px;color:red;"><div>'
+ str + '</div></div>';
var noticeBar = document.getElementById("noticeBar");
noticeBar.innerHTML = noticeDiv
marqueeInterval[0] = window.setInterval(upStartFn, 3000);
function upStartFn() {
if (dir == "left") {
noticeBar.innerHTML = "";
window.clearInterval(marqueeInterval[0]);
window.clearInterval(marqueeInterval[1]);
leafscroll();
return;
}
var marqueeBox = document.getElementById("marqueeBox");
if (noticeArray[marqueeId])
var str = "<a onclick='javascript:alert("
+ noticeArray[marqueeId][0]
+ ");' style='cursor:pointer;'>"
+ noticeArray[marqueeId][1] + "</a>";
if (noticeArray[0][0] == "-1")
str = noticeArray[0][1];
marqueeId++;
if (marqueeId >= noticeArray.length)
marqueeId = 0;
if (marqueeBox.childNodes.length == 1) {
var nextLine = document.createElement('DIV');
nextLine.innerHTML = str;
nextLine.style.width = marqueeWidth;
marqueeBox.appendChild(nextLine);
} else {
marqueeBox.childNodes[0].innerHTML = str;
marqueeBox.appendChild(marqueeBox.childNodes[0]);
marqueeBox.scrollTop = 0;
}
marqueeBox.onmouseover = function() {
window.clearInterval(marqueeInterval[0])
}
marqueeBox.onmouseout = function() {
marqueeInterval[0] = window.setInterval(upStartFn, 3000);
}
if (marqueeInterval[1])
window.clearInterval(marqueeInterval[1]);
marqueeInterval[1] = window.setInterval(scrollFn, 10);
}
function scrollFn() {
var marqueeBox = document.getElementById("marqueeBox");
marqueeBox.scrollTop++;
if (marqueeBox.scrollTop % marqueeHeight == (marqueeHeight - 1)) {
window.clearInterval(marqueeInterval[1]);
}
}
}
function left() {
dir = 'left';
}
function up() {
dir = 'up';
}
</script>
</body>
</html>
分享到:
相关推荐
总结,创建一个jQuery文本向上滚动代码带上下翻转按钮的插件涉及到理解jQuery库的基本操作、插件开发模式、事件监听以及动画效果的实现。通过以上步骤,你可以构建一个具有用户交互性的文本滚动组件,增强网页的动态...
"不间断向上滚动代码"是一种常见的网页动画效果,也称为无限滚动或自动滚动。这种效果使得网页内容能够持续不断地从底部向顶部滚动,创造出一种连续、无缝的浏览体验,常用于新闻网站、社交媒体和产品展示页面,以便...
【无缝垂直向上滚动】是一种常见的网页动态效果,它主要用于展示一串连续的信息,如新闻标题、广告或菜单项,通过不间断地向上滚动,使用户能够查看到更多的内容而无需手动翻页。这种效果在网站设计中被广泛应用,...
这通常可以通过JavaScript来实现,监听页面的`beforeunload`或`unload`事件,存储滚动位置到本地存储(localStorage或sessionStorage)。 5. **实现技术**:在H5中,可以使用`window.pageYOffset`或`document....
在这个例子中,`#scrollingText`是待滚动元素的选择器,`direction:'up'`表示向上滚动,`speed:50`则是滚动速度的设定。 此外,jQuery插件通常具有良好的文档支持,开发者可以在查阅插件的官方文档或示例代码后,...
例如,可以改变页面容器的`transform: translateY()`值,模拟页面向上滚动的效果,同时设置合适的`transition-duration`让动画自然过渡。 5. **性能优化**:为了保证在低端设备上的流畅性,需要考虑性能优化。比如...
JavaScript结合CSS3的变换(transform)和过渡(transition)属性,可以创建平滑的3D翻页效果。 5. **向上滚动的展示广告**:当用户向下滚动页面时,广告从顶部向上滑入视区。这需要监听滚动事件,根据滚动距离计算...
在IT领域,图片滚动是一种常见的网页动态效果,用于展示多张图片或信息,提升用户体验。在给定的标题和描述中,“收集几款图片滚动代码(横向、竖向、停顿、文字结合等)”表明这是一个关于不同类型的图片滚动效果的...
"jq翻页滚动"这个标签进一步明确了主题,指的是可能使用jQuery来实现页面的翻页滚动效果,这种效果通常用于模拟书籍翻页或幻灯片展示,让用户在浏览时有更自然的阅读体验。 从压缩包的文件名来看,我们有以下几个...
通过设定合适的滚动速度和间隔,可以使得文字以翻页的形式逐行滚动,既保留了信息的完整性,又不失动态效果。 MSClass的另一个亮点是文字间歇滚动。不同于传统的连续滚动,间歇滚动在每次滚动之间设定一定的间隔...
翻屏滚动是指在固定的高度或宽度内,图片从一端移动到另一端,形成翻页的效果。这通常需要对图片进行裁剪,并在滚动过程中适时加载下一帧,以保持平滑过渡。CSS3的`transform`属性和`transition`属性在这里起到关键...
3. **上下滚动支持**:不仅支持正常的向下滚动,还支持向上滚动时触发事件,使设计更为灵活。 4. **多个方向**:除了水平和垂直滚动外,Waypoints还支持元素的进入和离开视口的检测。 5. **无需精确定位**:无需...
总的来说,这个H5 demo提供了一种实现移动端上下滑屏翻页效果的方法,它具有良好的可扩展性和自适应性,可以帮助开发者快速构建响应式的移动端网页。对于想要学习或使用此类功能的人来说,这是一个有价值的资源。...
通过调整每个数字`<div>`的垂直位置,可以模拟出数字向上滚动的效果。 总的来说,JavaScript 实现数字滚动特效是通过创建动态的HTML结构,结合CSS的隐藏溢出特性,以及JavaScript定时更新和控制元素位置来实现的。...
14.2.3 展示翻页效果 416 14.2.4 展示缩略图新闻效果 419 14.2.5 图片滑动效果 423 14.2.6 三维相册 433 14.3 时间特效 442 14.3.1 时钟提示自动关闭 442 14.3.2 日历生成器 444 14.4 窗口特效 450 14.4.1 窗口拖动 ...
在网页设计和开发中,"鼠标滑动翻页"是一种常见的...通过监听滚动事件,判断翻页条件,结合CSS动画,我们可以创建出流畅的滑动翻页效果。在实际开发中,还需要考虑到兼容性和性能优化,确保在各种环境下都能稳定运行。
在本文中,我们将深入探讨如何使用原生JavaScript实现滚轮翻页效果,这是一个常见的交互功能,常见于全屏切换或幻灯片展示中。我们首先会解析滚轮事件及其相关属性,然后分析提供的示例代码,最后理解并解释节流函数...
在JavaScript编程领域,"js带按钮的九宫格图片轮播滚动代码"是一个常见的应用场景,主要涉及网页动态展示和交互设计。这样的功能通常用于产品展示、图像广告或用户界面的创新设计。以下将详细讲解这一知识点的相关...
// 向上滚动50像素 } else if (event.target.id === "downButton") { // 假设downButton是向下翻页的按钮 $(this).animate({ scrollTop: currentScroll + 50 }, 'slow'); // 向下滚动50像素 } }); ``` 在这个...