js 代码
- var GDnew=function(){}//1
- GDnews.Effect=function(){};//2
- //上面两个方法是为了扩大命名空间
- GDnews.Effect.MoveSpeed=Class.create();
- GDnews.Effect.MoveSpeed.prototype={
- initialize:function(element) {
- this.element = $(element);
- this.options = Object.extend({
- x: 0,
- y: 0,
- mode: 'relative',
- delay:85,
- amountX:0,
- amountY:0
- }, arguments[1] || {});
- this.event("beforeSetup");
- this.options.amountX=Math.abs(this.options.amountX);
- this.options.amountY=Math.abs(this.options.amountY);
- this.scroX=0;//目前已经移动的X数目
- this.scroY=0;//目前已经移动的Y数目
- // Bug in Opera: Opera returns the "real" position of a static element or
- // relative element that does not have top/left explicitly set.
- // ==> Always set top and left for position relative elements in your stylesheets
- // (to 0 if you do not need them)
- this.element.makePositioned();
- this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
- this.originalTop = parseFloat(this.element.getStyle('top') || '0');
- if(this.options.mode == 'absolute') {
- // absolute movement, so we need to calc deltaX and deltaY
- this.options.x = this.options.x - this.originalLeft;
- this.options.y = this.options.y - this.originalTop;
- }
- this.event("afterSetup");
- this.scroll();
- },
- update: function() {
- this.event("beforeUpdate");
- var _x=Math.abs(this.options.x);
- var _y=Math.abs(this.options.y)
- var amountX=(this.scroX+this.options.amountX)>=_x ?
- (_x-this.scroX/*归零*/) : this.options.amountX;
- var amountY=(this.scroY+this.options.amountX)>=_y ?
- (_y-this.scroY/*归零*/) : this.options.amountY;
- this.scroX+=amountX;//执行X总数累加
- this.scroY+=amountY;//执行Y总数累加
- this.element.setStyle({
- left:Math.round(this.originalLeft+(this.options.x<0 ? -this.scroX : this.scroX)) + 'px',
- top:Math.round(this.originalTop+(this.options.y<0 ? -this.scroY : this.scroY)) + 'px'
- });
- this.event("beforeFinish");
- if (amountX==0 && amountY==0){//结束
- this.scroY=0;
- this.scroX=0;
- this.cancel();
- this.event("afterFinish");
- }
- },
- scroll:function(){
- this.cancel();
- this.setTimeInt=window.setInterval(this.update.bind(this),this.options.delay);
- },
- cancel:function(){
- if(this.setTimeInt) window.clearInterval(this.setTimeInt);
- this.setTimeInt=null;
- },
- event: function(eventName) {
- if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
- if(this.options[eventName]) this.options[eventName](this);
- }
- }
- 在这个类的基础上,再写一个实现marquee的类:
- GDnews.w3cMarquee=Class.create();
- /**
- *@param element 目标的marquee标签
- *@ nomouseEvent 默认为false,类似传统marquee上的onMouseover=this.stop()系列行为
- *此方法在IE中不执行。思路是把marquee删除,用一个div代替它,然后设置此div的left和top来实现滚动。
- */
- GDnews.w3cMarquee.prototype={//目前仅实现behavior=scroll
- initialize:function(element,nomouseEvent){
- if(/MSIE/.test(navigator.userAgent)){//如果是IE,留着真marquee
- if(nomouseEvent==true) return;
- element=$(element);
- Event.observe(element,'mouseover',function(){element.stop()});
- Event.observe(element,'mouseout',function(){element.start()});
- return;
- }
- this.marquee=$(element);
- if("marquee"!=this.marquee.tagName.toLowerCase()) return;
- this._createDiv();//创建DIV
- this.makePosition();//设置位置
- var _x=this.scrollWidth;
- var _y=this.scrollHeight;
- var newElementId=this.newElementId;
- var options={x:_x,y:_y,delay:this.scrollDelay,
- amountX:this.scrollAmount,amountY:this.scrollAmount,
- beforeSetup:function(effect){
- if(nomouseEvent==true) return;
- var cancel=effect.cancel.bind(effect);
- var scroll=effect.scroll.bind(effect);
- Event.stopObserving(newElementId,'mouseover',cancel);
- Event.stopObserving(newElementId,'mouseout',scroll);
- Event.observe(newElementId,'mouseover',cancel);
- Event.observe(newElementId,'mouseout',scroll);
- },
- beforeUpdate:function(effect){
- // if(behavior=='alternate'){//本想实现'alternate'行为,但由于时间关系,我就把它先留着。
- // var left=parseInt(effect.element.getStyle('left'));
- // var top=parseInt(effect.element.getStyle('top'));
- // see(left+","+top);
- // if(effect.scroX>=_parentWidth || effect.scroY>_parentHeight){
- // effect.options.x=-1*effect.options.x;
- // effect.options.y=-1*effect.options.y;
- // effect.cancel();
- // window.setTimeout(effect.scroll.bind(effect),100);
- // }
- // }
- },
- afterFinish:function(effect){
- /*if(behavior=='scroll'){*/
- effect.element.setStyle({left:effect.originalLeft,top:effect.originalTop});
- window.setTimeout(effect.scroll.bind(effect),100);
- /*}*/
- }
- };
- new GDnews.Effect.MoveSpeed(this.scrollId,options);
- },
- _createDiv:function(){
- this.newElementId=(this.marquee.id || "_marquee")+"_"+(new Date().getTime());
- var _attribute=$A(this.marquee.attributes);
- this.divEl=document.createElement('div');
- this.divEl.id=this.newElementId;
- this.scrollId=(this.marquee.id || "_marquee")+"_child_"+(new Date().getTime());
- this.scrollEl=document.createElement('div');
- this.scrollEl.id=this.scrollId;
- try{
- this.marquee.parentNode.insertBefore(this.divEl,this.marquee);//新建一个node
- this.divEl.appendChild(this.scrollEl);//一个用于滚动的node
- _attribute.each(function(d,i){//把其它属性放回去
- var key=d.nodeName.toLowerCase();
- var nodeValue=d.nodeValue;
- if(typeof nodeValue=='object' || typeof nodeValue=='function'
- || nodeValue=='' || nodeValue==null || key=='truespeed' || key=='id') return;
- switch (key){
- case 'direction':
- this.direction=nodeValue;
- return;
- break;
- case 'scrolldelay':
- this.scrollDelay=parseInt(nodeValue);
- return;
- break;
- case 'scrollamount':
- this.scrollAmount=parseInt(nodeValue);
- return;
- break;
- case 'behavior':
- this.behavior=nodeValue;
- return;
- break;
- case 'loop':
- this.loop=parseInt(nodeValue);
- return;
- break;
- }
- this.divEl.setAttribute(key,nodeValue);//IE中只有className而没有class
- }.bind(this));
- $A(this.marquee.childNodes).each(function(d){//把子元素放回去
- if(d.length!=1/*这是个长为1的textNode*/) this.scrollEl.appendChild(d);
- }.bind(this));
- this.selfWidth=parseInt($(this.scrollEl).offsetWidth);
- this.selfHeight=parseInt($(this.scrollEl).offsetHeight);
- }catch(e){
- throw e;
- }
- Element.remove(this.marquee);//结束真marquee的使命
- },
- makePosition:function(){
- $(this.newElementId).makeClipping();
- var scrollEl=$(this.scrollEl);
- scrollEl.makePositioned();
- this.originalLeft = parseFloat(this.scrollEl.getStyle('left') || '0');
- this.originalTop = parseFloat(this.scrollEl.getStyle('top') || '0');
- this.loop = this.loop || -1;
- this.scrollDelay = this.scrollDelay || 85;
- this.scrollAmount = this.scrollAmount || 6;
- this.direction = this.direction || 'left';
- this.behavior = this.behavior || 'scroll';
- if(window.opera) {//fix opera。Opera对marquee标签有不同的解释
- switch (this.direction){
- case '128':
- this.direction='left';
- break;
- case '129':
- this.direction='right';
- break;
- case '164':
- this.direction='up';
- break;
- case '165':
- this.direction='down';
- break;
- }
- if(this.behavior='137') this.behavior='scroll';
- if(this.behavior='138') this.behavior='alternate';
- else this.behavior='slide';
- }
- this.behavior = this.behavior || 'scroll';
- this.parentWidth = parseInt(this.divEl.offsetWidth);
- this.parentHeight = parseInt(this.divEl.offsetHeight)
- this.scrollWidth = this.parentWidth+this.selfWidth;
- this.scrollHeight = this.parentHeight+this.selfHeight;
- var topLeft={};
- switch (this.direction){
- case 'up':
- this.scrollWidth=0;
- this.scrollHeight=-this.scrollHeight;
- topLeft={top:this.parentHeight+"px",left:this.originalLeft+"px"};
- break;
- case 'down':
- this.scrollWidth=0;
- topLeft={top:(-this.selfHeight-this.originalTop)+"px",left:this.originalLeft+"px"};
- break;
- case 'right':
- this.scrollHeight=0;
- topLeft={top:this.originalTop+"px" ,left:-this.selfWidth+"px"};
- break;
- default:
- this.scrollHeight=0;
- this.scrollWidth=-this.scrollWidth;
- topLeft={top:this.originalTop+"px",left:this.parentWidth+"px"};
- }
- scrollEl.setStyle(topLeft);
- scrollEl.show();
- }
- }
- GDnews.w3cMarquee.initAll=function(){
- var marquees=$A(document.getElementsByTagName('marquee'));
- marquees.each(function(d){new GDnews.w3cMarquee(d);});
- }
相关推荐
这个源代码已经经过了完整的测试,确保功能正常运行,用户可以放心使用。 ASP是微软开发的一种服务器端脚本语言,用于生成动态网页。在ASP个人博客系统中,它负责处理用户请求,与数据库交互,以及渲染HTML页面。源...
白盒测试是一种测试方法,侧重于程序内部结构的测试,通过查看源代码并了解其工作原理来进行测试。 2. **逻辑覆盖与路径测试**:掌握白盒测试中的逻辑覆盖技术和路径测试方法。逻辑覆盖是指通过对程序中的逻辑判断...
标题 "博客中测试不同语言速度差异的源代码" 涉及的是一个比较不同编程语言执行效率的主题。在这个场景中,作者可能通过编写相同功能的程序,并在多种语言(如C++, C#, Java)中运行,来测量每种语言的执行时间,...
【Java开源博客代码】是一个开放源码的项目,旨在为开发者提供一个参考,帮助他们构建自己的博客系统。这个项目的重点在于学习和理解如何使用Java语言和相关技术来创建一个功能完善的博客平台。以下是对其中涉及的...
这通常通过编写特定的测试用例来实现,这些测试用例会在代码修改或新功能添加后自动运行,以防止引入错误。 描述中提到的链接指向一个ITeye博客,虽然具体内容未提供,但我们可以推测博主可能分享了关于如何有效地...
它允许开发者编写可执行的测试用例来验证代码的功能,确保其正确性。 描述中提到的 "博文链接:https://poson.iteye.com/blog/417485" 提示我们可以在这个链接找到更多关于这个源代码的上下文信息,但在这里我们...
博客系统项目代码通常涵盖了一个完整的Web应用程序开发,用于创建、发布和管理个人或集体的博客内容。这样的系统可能包括前端用户界面、后端服务器逻辑、数据库交互以及一系列辅助功能,如用户注册、权限管理、评论...
开发过程中,单元测试、集成测试和压力测试是必不可少的,以确保系统功能完整、性能良好。开发者可能使用JUnit、Mockito等工具进行测试。 以上就是关于"博客系统项目_源代码"所涉及的主要技术点和开发流程,对于...
### EasyTalk博客系统代码审计知识点概述 #### 一、EasyTalk博客系统介绍 - **背景与特点**:EasyTalk是国内首款多用户PHP+MySQL开源微博客系统,支持多种发布及接收信息的方式,如网页和手机等。该系统由兰州乐游...
"需求稳定"可能指的是该博客系统经过了充分的需求分析和测试,确保了其功能的稳定性和可靠性。这通常意味着系统在发布前已经过严格的测试,能够满足用户的基本需求,如发布文章、评论、搜索等功能,并且在不同环境下...
【博客Java设计代码】是一个完整的Java项目,主要涵盖了构建一个功能齐全的博客系统所需的关键技术和概念。这个项目可能包括了用户注册、登录、发布博客文章、评论、分类管理等多个功能模块,是学习Java Web开发的一...
这个系统的核心功能包括文章创作、分类管理、评论互动、用户注册与登录、模板定制等多个方面,旨在为博主提供一个高效、易用且功能丰富的博客环境。 在C#源代码中,我们可以看到以下几个关键的技术知识点: 1. **...
在开源博客代码中,MAVEN的使用意味着开发者可以通过简单的命令行指令进行编译、测试和打包,而无需手动配置复杂的构建过程。这有助于提高开发效率,同时也使得项目在不同环境下的可移植性增强。 接着,JPA作为Java...
博客系统源代码是一种常见的开发项目,它展示了如何利用Java编程语言和SpringBoot框架构建一个功能完善的博客管理平台。SpringBoot是Java领域一个流行的轻量级框架,它简化了新Spring应用的初始搭建以及开发过程,...
Python个人博客系统django源代码,个人网站系统源程序源码+数据库(毕业设计),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要...
这两款最新的CSS模块可能是经过优化和测试的代码片段,适用于CSDN博客平台,能够提供诸如响应式设计、动态效果、易读性增强等功能。 例如,一个可能的模组可能包含以下关键知识点: 1. **布局设计**:使用CSS来...
【标签】:“源个人博客代码”进一步明确了主题,暗示这个项目专注于个人博客的前端和后端开发,提供了原始的编程资源。 根据压缩包子文件的文件名称列表无法提供具体的文件内容,但通常一个个人博客的源代码包可能...
在这个"MVC博客源代码"项目中,我们可以深入学习如何利用ASP.NET MVC来创建一个功能完善的博客系统。 1. **MVC模式**:MVC模式将应用分为三个主要部分——模型(Model)、视图(View)和控制器(Controller)。模型...
模块化设计、代码复用、单元测试等都是提高代码质量的关键。 总的来说,“博客全部源代码_多用户博客空间源码下载.rar”是一个综合性的项目,涵盖了Web开发的多个方面,从前端界面到后端逻辑,再到数据库设计和安全...
博客系统源代码是开发人员构建在线写作和分享平台的核心组件,它包含了实现用户注册、登录、文章发布、评论互动等功能的全部程序。"博客系统源代码--005"可能是这个系列教程或项目的第五个部分,可能涉及了系统的...