浅析xml+Moviecliploader动态载入图片
前言废话为什么要做相册?
(1)相册,老生常谈,但搜索相关教程和源代码,基本都是分祯手动摆放loader,并在对应祯上分配图片路径再配合this这个特殊变量指待自身制作而成,感觉不大好,因为我不大会写代码,所以讨厌那种祯上和MC到处是代码的东西,烦琐且不易查看和改写,尤其是哪些问题需要注意,没有说明,不人性。
(2)以杂家愚见,图片是一个包括处理(PS)和展示(FLASH)的统一体,再美的图片如果不能展示,枉然,所以,用flash展示图片的能力很重要,当然,你有权反驳你可以把图片传到博客,那说明我们不是同一路人。
为什么今天才写?
(1)要我做一个东西,我得首先想有没有个清晰的思路,没有,不做,直到想到为止;其次实现方法是否简单,太复杂了,不做,因为我怕出错了没那心思找错。基于以上两点,我从来没亲自写过一个相册。
(2)几天前,我在贵宝地发现了这个帖子,地址:[url]http://bbs.blueidea.com/thread-2669734-1-7.html[/url],思路很好,所以决定试着做一个,做着做着,有内化了些自己的东西和感想,感言不吐无快,故写下一篇教程,算是做个纪念。
正文
声明:这些代码肯定会有些问题存在或有更简单更优化的方式,希望互帮互助,指点一下我们共同的江山。
我曰:看了以上我给出的帖子地址,下他的源文件,下了吗?
你应:下了并看懂了他的代码
好,接下来我得首先指出他源代码中的一点bug,在他对页面数量进行判断的时候,他采用的方式是pageno=Math.floor(nums/pagesize)+1;//判断总页数,我改写为pageno=(nums%pagesize==0)?nums/pagesize:Math.floor(nums/pagesize)+1;//判断总页数,比较一下,可以发现他忽略了一种情况,当nums%pagesize==0时会产生一个空白页。
[color=Red]导读:为了增加代码可读性,我将分为两部分,从基础到复杂逐步叙述;
对于这个相册由于代码基础差,在写的过程中会到了许多问题,这可能也是一种经验或财富,所以我也就不怕丢人现眼,把一些我曾犯过的错误写在后面的标注里面。[/color]
[color=Red]第一部分:基本的图片载入技巧,从基础开始,反璞归真;
第二部分:解读相册基本构成及实现方法,原形毕露,显现真正意义上的相册,外加一些必要特效;
第三部分:加入动态元素,显示当前图片信息;
第四部分:整合代码交给你自己,按前面的步骤写好代码,检查是否完整,测试吧。[/color]
要实现下面几个部分效果,你需要构造一些基本的部件:
一个链接名为loadmc的MC,里面包含背景(bg_mc),模拟加载中的小动画loading_mc,一个装载图片的空MC(loadpic_mc),按钮btn_mc。
[color=Red]第一部分
目标:载入图片成缩略图形式+分类功能[/color]
首先看一段trace语句,以下我将做个简单概括,以便能首先理解他的大概流程和思路,这对些代码很重要,如下:
xml loaded
mc shumu=20
loader0
loader1
loader2
loader3
loader4
loader5
loader6
loader7
loader8
loader9
loader10
loader11
loader12
loader13
loader14
loader15
loader16
loader17
loader18
loader19
complete
当前id为1
complete
当前id为2
complete
当前id为3
complete
当前id为4
complete
当前id为5
complete
当前id为6
complete
当前id为7
complete
当前id为8
complete
当前id为9
complete
当前id为10
complete
当前id为11
complete
当前id为12
complete
当前id为13
complete
当前id为14
complete
当前id为15
complete
当前id为16
complete
当前id为17
complete
当前id为18
complete
当前id为19
complete
当前id为20
[color=Red]可以看出,这个相册的执行流程大概为:
载入XML————————————————要显示资料(即图片),首先必须要有资料
构造装载图片的容器——————————loader0~loader19就是通过计算出来的当前页容器数用attachmovie 动态构造的容器。
载入图片到容器————————————这有一个思想要掌握:载入图片我采用的是xml+moviecliploader 方法,这种方法载入图片的方式是:取得当前页面第一个容器对应图片在XML中实际编号,并载入到第一个容器即loader0中,一待载完,就会触发myobj.oncomplete事件(如上,我用trace(” complete")来观察事件状态),同时id++,从而不断重复,直到条件为假。
细节——————————————————变量初值定义,自定义函数,增加监听,再就是最重要的书写要仔细,错误往往在出细节方面,后面我将提到我写这个代码时由于不仔细导致的一些错误。[/color]
源代码如下:
[color=Red]时间轴部分:[/color]var id=0;
var pagesize=20;
var pageno=1;
var myML=new MovieClipLoader();
var myobj=new Object();
myML.addListener(myobj);
myobj.onLoadComplete=function(){
trace("complete");
if(id<cnums+pagesize*(pageno-1)){
id++;
trace("当前id为"+id)
loadpic(id);
}//if(id<cnums+pagesize*(pageno-1))在该语句上,起初我把pageno-1写成了pageNo-1,而上一个trace语句能执行,我发现是该条件没通过,后来才检查到是写错了,所以说写代码要仔细
}
myobj.onLoadInit=function(tar){
tar._width=85;
tar._height=53;
tid=id-1;
cid=tid-pagesize*(pageno-1);
_root["loader"+cid].loading_mc._visible=false;
_root["loader"+cid].bg_mc._visible=false;
//_root["loader"+cid].btn_mc.pid=tid;
_root["loader"+cid].btn_mc.onRelease=function(){
//ttid=this.pid;
//url=mylist[ttid].firstChild;
//getURL(url);如果你想有”单击小图转到地址“效果,曲调这个函数体内的//即可
}
}
var myxml=new XML()
myxml.ignoreWhite=true;
myxml.onLoad=function(suc){
trace("xml loaded");
if(suc){
mylist=myxml.firstChild.childNodes;
nums=mylist.length;
loadmc();
loadfirstpic();
}
}
var lei=1;
myxml.load("list"+lei+".xml");
for(var i=1;i<=3;i++){
_root["lei"+i].lei=i;}
function loadmc(){
if(pagesize*pageno>nums){
cnums=nums%pagesize;}
else{
cnums=pagesize}
trace("mc shumu="+cnums)
for(var j=0;j<pagesize;j++){
removeMovieClip(_root["loader"+j])
}//你也可以不要这前面的,从头到尾用这几个容器,上面两句起到重载作用,祛除旧容器,根据当前页容器变量值重新装载容器,避免了一些空白容器的产生
for(var i=0;i<cnums;i++){
_root.attachMovie("loadmc","loader"+i,100+i);
trace(_root["loader"+i]._name)
_root["loader"+i]._x=90*(i%5);//(i%5)中的括号千万不能省略,否则坐标的错误会导致一些MC显示不出来
_root["loader"+i]._y=60*Math.floor(i/5);
}
}
function loadfirstpic(){
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root.loader0.loadpic_mc)
}
function loadpic(id){
imgurl=mylist[id].attributes.path;
lid=id-pagesize*(pageno-1);
myML.loadClip(imgurl,_root["loader"+lid].loadpic_mc)
}
fir_btn.onRelease=function(){
id=0;
pageno=1;
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
}
last_btn.onRelease=function(){
trace("last");
id=pagesize*(pageno-1);
pageno=(nums%pagesize==0)?nums/pagesize:Math.floor(nums/pagesize)+1;//判断总页数,注意pagesize==0千万不要写成pagesize=0(“=”是赋值运算符,左边必须是变量或属性)
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
}
pre_btn.onRelease=function(){
pageno--;
if(pageno<=0){pageno=1
}
id=pagesize*(pageno-1);
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
}
next_btn.onRelease=function(){
trace("release next");
pageno++;
var yeshu=(nums%pagesize==0)?nums/pagesize:(Math.floor(nums/pagesize)+1);
if(pageno>=yeshu){
pageno=yeshu;
}
trace("总页数="+yeshu)
id=pagesize*(pageno-1);
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
}
//2008.5.18 5:13测试完工
//分类功能测试于7:37完成 平沙
[color=Red]按钮部分[/color]:舞台有三个MC分别为lei1,lei2,lei3
每个MC上加同样动作:
on (release) {
_root.id=0;
_root.pageno=1;//将id,pageno归零,否则单击转入另一类图片时,他会延续原来的id,pageno载入图片
_root.myxml.load("list"+this.lei+".xml");//myxml在根时间轴,所以要引用它,前面必须加路径_root
}
[color=Red]以下解释希望使代码看起来更有基础:
(1)判断当前页容器数并载入[/color]if(pagesize*pageno>nums){
cnums=nums%pagesize;}
else{
cnums=pagesize}
.
.
.
.
.
[color=Red](2)容器排列[/color]
排列方法有很多,此方法是在经典看到的一篇帖子提到过的,很巧妙
for(var i=0;i<cnums;i++){
_root.attachMovie("loadmc","loader"+i,100+i);
trace(_root["loader"+i]._name)
_root["loader"+i]._x=90*(i%5);//(i%5)中的括号千万不能省略,否则坐标的错误会导致一些MC显示不出来
_root["loader"+i]._y=60*Math.floor(i/5);
}
[color=Red]余数优势—————————————————————————— 生成X坐标
Math.floor()方法也是一个很重要的概念,“舍零取整”——————生成Y坐标[/color]
[color=Red](3)图片分页
分页的本质很简单:就是根据当前页面变量值(即pageno,以下所要说到的按钮控制页数跳转就是在“通过按钮改变pageno值),载入不同编号图片文件[/color][color=Red]总页数判断[/color]:这我在最先就说过了pageno=(nums%pagesize==0)?nums/pagesize:Math.floor(nums/pagesize)+1;//判断总页数
[color=Red]按钮控制页数跳转[/color]:我先截段代码说明
pre_btn.onRelease=function(){
pageno--;
if(pageno<=0){pageno=1
}
id=pagesize*(pageno-1);//这里的id变量就是当前页第一个容器应该载入的图片编号
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
}
[color=Red]按钮控制页数跳转流程:
A————算出单击后的页面数
pageno--;
if(pageno<=0){
pageno=1
}
id=pagesize*(pageno-1);
B————根据当前页面数,装载新的容器
C————在新装载的容器的第一个即loader0载入指定ID的图片,并触发myobj.onLoadComplete事件,不段循环。[/color]
[color=Red](4)编号互换[/color]
把XML文件里指定编号(id)的图片加载到舞台上的容器,XML文件编号(即图片总数)大于容器编号(即自定义loader数量)时,举个例子,如要把[50]编号的图片加载到舞台,而舞台只有20个容器,这就存在个编号互换的问题。
可以用以下语句达到目的:
lid=id-pagesize*(pageno-1);
看看,是不是感觉和前面”按钮控制页数跳转“所截取代码id=pagesize*(pageno-1)有一点联系呢,的确有联系
id=pagesize*(pageno-1)—————— loader0,何解?
当前页应该载入的图片编号第一个载入loader0,那其他编号的图片要载入哪个容器呢?
很显然,用lid=id-pagesize*(pageno-1);得其容器编号最恰当不过了
不明白的可以查阅我的自定义函数 loadpic(id)
[color=Red](5)调整显示[/color]_root["loader"+i]._x=90*(i%5);
_root["loader"+i]._y=60*Math.floor(i/5);
上面的代码有弹性,可以自定义页面容积(pagesize),以决定每页显示多少图片。
自定义容器整体坐标偏移,即在_x或_y的右边加上一个常数。
自定义每行显示图片数,就是上面函数中的”5“,不过上下两句自定义数必须相等,有点数学知识的一想就明白。
自定义行及列间距,结合前面两个自定义数值便可以做出各种规则排列效果,举个例子:
_root["loader"+i]._x=90*(i%10);
_root["loader"+i]._y=350+0*Math.floor(i/5);
这样一改便做出个坐标为(0,350),一行十列(行间距由60改为了0,5改为了10)
[color=Red](6)分类功能[/color]
时间轴部分:
var lei=1;
myxml.load("list"+lei+".xml");
for(var i=1;i<=3;i++){
_root["lei"+i].lei=i;}
按钮部分:
on (release) {
_root.id=0;
_root.pageno=1;//将id,pageno归零,否则单击转入另一类图片时,他会延续原来的id,pageno载入图片
_root.myxml.load("list"+this.lei+".xml");//myxml在根时间轴,所以要引用它,前面必须加路径_root
}
说明:能传附件了,但由于我所用的图片太大,传不上来,只能用小图片代替了,借用我先前提到的帖子里面的图片。
该部分源码地址:[attach]89960[/attach]
[color=Red]第二部分
目标:载入图片成缩略图形式+分类功能+单击缩略图在指定区域以指定大小显示大图[/color]
基本思路:载入+控制显示大小+必要特效
载入部分:
新建一个用来显示大图的空MC,命名为showimg,再用MovieClipLoader,增加监听对象实现
不过其中有一个难点和技巧,关于大图地址变量动态赋值,这里我又用了this这个特殊变量,代码如下:
在myobj.onLoadInit=function(tar)函数体内加入语句
_root["loader"+cid].btn_mc.showimg_url=id-1;//动态赋予id数。注意,这里的_root不能改为this,因为他包含在onloadinit事件中,里面的this是以myobj为基础的,可以在其中用trace(this),显示[object object]
同样在函数体内_root["loader"+cid].btn_mc.onRelease=function()事件内部加入语句:
this.show_url=mylist[this.showimg_url].attributes.path;
trace(this.show_url)//测试用
myMCL.loadClip(this.show_url,"showimg")
控制显示大小:
var myMCL=new MovieClipLoader()//本来我不想再重新定义个监听对象,第一次载入还可以,但当Press舞台上的任意一个按钮,loader容器中的图片由于会执行myobj.onloadinit事件,但他不是执行第一个,导致图片载入不正常
var myobj2=new Object()
myMCL.addListener(myobj2)
myobj2.onLoadInit=function(tar){
imgw=470
imgoldw=tar._width
imgoldh=tar._height
trace("w="+imgoldw+"h="+imgoldh)//同一图片URL,即对同一图片press之后,虽然他们是一个url,但每press一 下,其值都会累加
bili=imgoldh/imgoldw
imgneww=imgw
imgnewh=imgw*bili
_root.showimg.onEnterFrame=function(){
showimg._width+=(imgneww-showimg._width)/2
showimg._height+=(imgnewh-showimg._height)/2
//_root.onEnterFrame=function(){
//showimg._width+=(imgneww-showimg._width)/2
//showimg._height+=(imgnewh-showimg._height)/2
// }
//此种状态下,上面的宽高只能加一次,而不能缓冲到imgneww和imgnewh
}
changeshow()//不要写在_root.showimg.onEnterFrame=function()内部
}
[color=Red]必要特效:缓冲变动+图片全方位展示[/color]
[color=Red]缓冲变动很简单:[/color]
_root.showimg.onEnterFrame=function(){
showimg._width+=(imgneww-showimg._width)/2
showimg._height+=(imgnewh-showimg._height)/2
}
[color=Red]图片全方位展示:图片随鼠标移动而移动[/color]
加入函数changeshow()
定义函数changeshow()
function changeshow(){
showimg._x=0
showimg._y=0
_root.onEnterFrame=function(){
left=0
right=470
up=0
down=300
if(_root._xmouse>left&&_root._xmouse<right&&_root._ymouse>up&&_root._ymouse<down){
showimg._x-=(_root._xmouse-right/2)/10
showimg._y-=(_root._ymouse-down/2)/10
if(showimg._x>left){
showimg._x=left
}
if(showimg._y>up){
showimg._y=up
}
if(showimg._x<right-showimg._width){
showimg._x=right-showimg._width
}
if(showimg._y<down-showimg._height){
showimg._y=down-showimg._height
}
}
}//end enterframe
}
[color=Red]第三部分:[/color]页面动态显示:在舞台拉一动态文本框,变量取名为count,在时间轴myobj.onLoadComplete=function()函数体内加入以下语句即可:
pagetotal=(nums%pagesize==0)?nums/pagesize:Math.floor(nums/pagesize)+1;
_root.count="当前页数为第"+pageno+"页"+"总页数"+ pagetotal ;
[[i] 本帖最后由 SUNXINZHE 于 2008-6-1 00:01 编辑 [/i]]
第四部分
[color=Red]第四部分目标:测试吧[/color]
现在给出我的全部代码:
时间轴部分:
var id=0;
var pagesize=8;
var pageno=1;
var myML=new MovieClipLoader();
var myobj=new Object();
myML.addListener(myobj);
myobj.onLoadComplete=function(){
trace("complete");
if(id<cnums+pagesize*(pageno-1)){
id++;
trace("当前id为"+id)
loadpic(id);
}//if(id<cnums+pagesize*(pageno-1))在该语句上,起初我把pageno-1写成了pageNo-1,而上一个trace语句能执行,我发现是该条件没通过,后来才检查到是写错了,所以说写代码要仔细
pagetotal=(nums%pagesize==0)?nums/pagesize:Math.floor(nums/pagesize)+1;
_root.count="当前页数为第"+pageno+"页"+"总页数"+ pagetotal ;
}
myobj.onLoadInit=function(tar){
tar._width=85;
tar._height=53;
tid=id-1;
cid=tid-pagesize*(pageno-1);
_root["loader"+cid].loading_mc._visible=false;
_root["loader"+cid].bg_mc._visible=false;
_root["loader"+cid].btn_mc.pid=tid;
_root["loader"+cid].btn_mc.showimg_url=id-1;//注意,这里的_root不能改为this,因为他包含在onloadinit事件中,里面的this是以myobj为基础的,可以在其中用trace(this),显示[object object]
_root["loader"+cid].btn_mc.onRelease=function(){
this.show_url=mylist[this.showimg_url].attributes.path;
trace(this.show_url)
ttid=this.pid;
myMCL.loadClip(this.show_url,"showimg")
trace(this.show_url)
}
}
var myMCL=new MovieClipLoader()//本来我不想再重新定义个监听对象,第一次载入还可以,但当Press舞台上的任意一个按钮,loader容器中的图片由于会执行myobj.onloadinit事件,但他不是执行第一个,导致图片载入不正常
var myobj2=new Object()
myMCL.addListener(myobj2)
myobj2.onLoadInit=function(tar){
//imgw=470
ming=imgurl
miaoshu=imgurl
imgoldw=tar._width
imgoldh=tar._height
w=imgoldw+"pix"
h=imgoldh+"pix"
trace("w="+imgoldw+"h="+imgoldh)//同一图片URL,即对同一图片press之后,虽然他们是一个url,但每press一 下,其值都会累加
/*bili=imgoldh/imgoldw
imgneww=imgw
imgnewh=imgw*bili
_root.showimg.onEnterFrame=function(){
showimg._width+=(imgneww-showimg._width)/2
showimg._height+=(imgnewh-showimg._height)/2
_root.onEnterFrame=function(){
showimg._width+=(imgneww-showimg._width)/2
showimg._height+=(imgnewh-showimg._height)/2
此种状态下,上面的宽高只能加一次,而不能缓冲到imgneww和imgnewh
}*/
url=mylist[id].firstChild;
lianjie.onPress=function(){
getURL(url,"_blank")
}
changeshow()//不要写在_root.showimg.onEnterFrame=function()内部
}
myobj2.onLoadProgress=function(target_mc,loadedBytes,totalBytes){
loaded=loadedBytes
loadtotal=totalBytes
daxiao=int(loaded/1024)+"Kb/"+int(loadtotal/1024)+"Kb"
baifenbi=int(loaded/loadtotal)
jindu=baifenbi
load_mc.load.loading._xscale=baifenbi*100
if(baifenbi=1){
load_mc.gotoAndPlay(10)
}
}
var myxml=new XML()
myxml.ignoreWhite=true;
myxml.onLoad=function(suc){
trace("xml loaded");
if(suc){
mylist=myxml.firstChild.childNodes;
nums=mylist.length;
loadmc();
loadfirstpic();
}
}
var lei=1;
myxml.load("list"+lei+".xml");
for(var i=1;i<=3;i++){
_root["lei"+i].lei=i;}
function loadmc(){
if(pagesize*pageno>nums){
cnums=nums%pagesize;}
else{
cnums=pagesize}
trace("mc shumu="+cnums)
for(var j=0;j<pagesize;j++){
removeMovieClip(_root["loader"+j])
}
for(var i=0;i<cnums;i++){
_root.attachMovie("loadmc","loader"+i,100+i);
trace(_root["loader"+i]._name)
_root["loader"+i]._x=90*(i%8);//(i%5)中的括号千万不能省略,否则坐标的错误会导致一些MC显示不出来
_root["loader"+i]._y=350+0*Math.floor(i/5);
}
}
function loadfirstpic(){
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root.loader0.loadpic_mc)
myMCL.loadClip(imgurl,"showimg")
}
function loadpic(id){
imgurl=mylist[id].attributes.path;
lid=id-pagesize*(pageno-1);
myML.loadClip(imgurl,_root["loader"+lid].loadpic_mc)
}
function changeshow(){
showimg._x=0
showimg._y=0
_root.onEnterFrame=function(){
left=0
right=470
up=0
down=300
if(_root._xmouse>left&&_root._xmouse<right&&_root._ymouse>up&&_root._ymouse<down){
mousex=_xmouse
mousey=_ymouse
showimg._x-=(_root._xmouse-right/2)/10
showimg._y-=(_root._ymouse-down/2)/10
if(showimg._x>=left){
showimg._x=left
}
if(showimg._y>=up){
showimg._y=up
}
if(showimg._x<right-showimg._width){
showimg._x=right-showimg._width
if(showimg._x>=left){
showimg._x=left
}//加上这个判断很必要,因为有的图片会很窄,right-showimg._width成正,坐标会发生非正常移动
}
if(showimg._y<down-showimg._height){
showimg._y=down-showimg._height
if(showimg._y>=up){
showimg._y=up
}
}
}
}//end enterframe
}
fir_btn.onRelease=function(){
id=0;
pageno=1;
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
myMCL.loadClip(imgurl,"showimg")
}
last_btn.onRelease=function(){
trace("last");
pageno=(nums%pagesize==0)?nums/pagesize:Math.floor(nums/pagesize)+1;//判断总页数,注意pagesize==0千万不要写成pagesize=0(“=”是赋值运算符,左边必须是变量或属性)
id=pagesize*(pageno-1);//这句和前一句不能调换,否则id值的计算会以pageno=1,pagesize=20的初值来计算得0,然后i++得1,你可以调换一下看看,他只会TRACE出“complete 当前id为1”
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
myMCL.loadClip(imgurl,"showimg")
}
pre_btn.onRelease=function(){
pageno--;
if(pageno<=0){pageno=1
}
id=pagesize*(pageno-1);
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
myMCL.loadClip(imgurl,"showimg")
}
next_btn.onRelease=function(){
trace("release next");
pageno++;
var yeshu=(nums%pagesize==0)?nums/pagesize:(Math.floor(nums/pagesize)+1);
if(pageno>=yeshu){
pageno=yeshu;
}
trace("总页数="+yeshu)
id=pagesize*(pageno-1);
loadmc();
imgurl=mylist[id].attributes.path;
myML.loadClip(imgurl,_root["loader0"].loadpic_mc)
myMCL.loadClip(imgurl,"showimg")
}
btn.onRollOver = function(){ //鼠标移动btn上时执行函数
onEnterFrame = function(){
shuom.scroll++; //动态文本向上一行一行的移动
}
}
btn.onRollOut = function(){ //鼠标移出btn
delete onEnterFrame; //文本滚动停止
}
//2008.5.18 5:13测试完工
//分类功能测试于7:37完成 平沙
MC部分:
lei1,lei2,lei3加入同样语句:
on (release) {
_root.id=0;
_root.pageno=1;//将id,pageno归零,否则单击转入另一类图片时,他会延续原来的id,pageno载入图片
_root.myxml.load("list"+this.lei+".xml");//myxml在根时间轴,所以要引用它,前面必须加路径_root
}
说明:能传附件了,但由于我所用的图片太大,传不上来,只能用小图片代替了,借用我先前提到的帖子里面的图片,但要注意,你下载后需要把我的小图片换成大图片(文件名要一样哦),否则你在显示大图后的“鼠标控制全方位展示”时由于是小图片会没有效果, 没办法,只不过是麻烦了点。
总源码地址:[attach]89958[/attach]
[[i] 本帖最后由 SUNXINZHE 于 2008-5-31 23:55 编辑 [/i]] :) 鼓励一下.
小建议,代码里不要加_root了 版主的鼓励是我写帖的动力
关于_root问题谢谢提醒,其实我原来在做的时候有过改动,想全部改成相对路径,只不过当时改的时候代码差不多全部完成了,经我一改,没有了任何效果,索性又恢复了
有时间了再来改哈,其实还是很简单的,只要细心 :D :D
:D 我最近也在弄这个东西。。遇到好多问题都不知道如何解决。。:( 加了几个威望,真的很有动力啊,记得当初我在做这个东西的时候会到的“enterframe疑惑”问题还是flash023帮助解决的
过几天我还将发一个关于“物体散射特效”制作的东西,希望大家关注,反正是共同进步。 刚有了上传附件的权限
为了保持下载的稳定性,我上传了附件,会方便些 下载了 学习 有人在求这方面的东西(载入图片,分页,分类,鼠标控制图片全方位展示)
顶上去,仔细看 这个是我地一个帖子 顶一个,看着流口水~ 多多学习 绝对支持。。不过发现点小问题。
就是下面那些按钮
按最后一页。或者第一页。
会重新加载。
应该是不动才对。 还发现一个问题。。就是那个连接那里。地址不行。。乱了套 先顶一下,以后仔细看 真不错,学习中....:D 搂住很强很暴力 *** 作者被禁止或删除 内容自动屏蔽 *** 很好,很强大! 拜读! 哦。对了,另外想问个问题,如何实现图片的自动缩放呢? 我的意思是说。让你底部的小图片可以任意载入图片,而且不变行。
当然大图也是了。缩放在一定范围内,我可以任意放图,但展示的时候不会变形,一直不会弄。希望那个朋友解决了,给个教程什么的,
楼主可否解决呢?
有点问题想请教!!
我也下载了楼主的附件学习了一下,可是有点小问题!就是点下面的小缩略图的时候,上面的大图有的不加载,就是点小图,没有反应。一类里最多有4张是这样的。
想请教!! [quote]原帖由 [i]zyj1022[/i] 于 2008-7-21 15:24 发表 [url=http://bbs.blueidea.com/redirect.php?goto=findpost&pid=4119404&ptid=2859914][img]http://bbs.blueidea.com/images/common/back.gif[/img][/url]
哦。对了,另外想问个问题,如何实现图片的自动缩放呢? 我的意思是说。让你底部的小图片可以任意载入图片,而且不变行。
当然大图也是了。缩放在一定范围内,我可以任意放图,但展示的时候不会变形,一直不会弄。希 ... [/quote]
这是等比例缩放效果,很简单的,思路:onLoadInit事件可以取得图片的真实高宽,定义一个变量纪录高宽比如a=高/宽,假设你要得到宽度是50,那么高度就应该是50*a
同样大图也是一样 [quote]原帖由 [i]jinyuz[/i] 于 2008-7-12 17:34 发表 [url=http://bbs.blueidea.com/redirect.php?goto=findpost&pid=4105077&ptid=2859914][img]http://bbs.blueidea.com/images/common/back.gif[/img][/url]
绝对支持。。不过发现点小问题。
就是下面那些按钮
按最后一页。或者第一页。
会重新加载。
应该是不动才对。 [/quote]
我本来的效果是如此,你可以改下,做个判断 [quote]原帖由 [i]yuying010[/i] 于 2008-7-21 18:34 发表 [url=http://bbs.blueidea.com/redirect.php?goto=findpost&pid=4119937&ptid=2859914][img]http://bbs.blueidea.com/images/common/back.gif[/img][/url]
我也下载了楼主的附件学习了一下,可是有点小问题!
就是点下面的小缩略图的时候,上面的大图有的不加载,就是点小图,没有反应。一类里最多有4张是这样的。
想请教!! [/quote]
应该不会啊,我当时做完后就反复测试了的
你最好仔细看下,如果真有问题,我现在也测试不了,见谅,一个月以后吧,如果你仔细读了教程,应当也可以自己解决的,当是练习吧,OK? 不错,支持一下……
请教!!缩略图加载问题!
[img]http://i.namipan.com/files/18ba570464dcc683e36c3818e1e5388138a5dceffa6f01007695/0/111.jpg[/img]有几张图片都正在加载,开始下面的小图宽是85的时候看不出来,但是点击的时候,大图不变,就像没有点中一样,后来我把缩略图的宽变窄了,就看出来是加载的地方除了问题,但是没找到改的方法。
[url]http://www.namipan.com/d/18ba570464dcc683e36c3818e1e5388138a5dceffa6f0100[/url]图片地址: 我把加载时候的图片截图了,各位可以看一下,是在找不到问题所在。
[[i] 本帖最后由 yuying010 于 2008-7-29 13:42 编辑 [/i]]
问题解决了!!
问题解决了!! 这个东西别沉啊 对新手了解XML很有用 那就顶上去呗。。。。我顶。。。。
顶。。
为什么要写的那么乱呢
为什么要写的那么乱呢不能写的规范一点么?
定义的变量名超级难看!
乱七八糟的
id计算的乱七八糟的,所以才导致有的图片点击有问题!!![url]http://bbs.blueidea.com/thread-2669734-1-7.html[/url] id=1,你的id=0,其他还跟人家写的一样!!! 晕倒!
回复 32# yuying010 的帖子
太武断了吧代码是乱了点,因为是第一次写教程,还请原谅!!!
至于你说“其他还跟人家写的一样”,我表示遗憾,因为我估计你根本没看完我的所有东西,还有,由于我的分页方法跟他是不同的,所以我的id必须等于0,至于为什么id=0,我应该是交代得很清楚了的,如果你换成id=1的话,根本无法用我的方法正确分页。
具体内容:
for(var i=0;i<cnums;i++){
_root.attachMovie("loadmc","loader"+i,100+i);
trace(_root["loader"+i]._name)
_root["loader"+i]._x=90*(i%5);//(i%5)中的括号千万不能省略,否则坐标的错误会导致一些MC显示不出来
_root["loader"+i]._y=60*Math.floor(i/5);
}
余数优势—————————————————————————— 生成X坐标
Math.floor()方法也是一个很重要的概念,“舍零取整”——————生成Y坐标
页:
[1]