上一篇 | 下一篇

在text成员中创建锚点

发布: 2007-1-25 15:17 | 作者: Will Turnage | 来源: director-online | 查看: 199次

  原著:Will Turnage   翻译:jerrowolf   我有一个project需要用到很多滚动文本,我想让这些文本实现像HTML文档中锚点的功能,当你点击一处时,它会自动滚动到你需要的该文本另外一个地方,你知道该怎么做么?
3We(Ve `H 奥古多媒体0[4fyI,m \b
  如果你想在text成员中模仿锚点功能,这不是很难,你要做的就是利用text成员的hyperlink方法的优点。为text成员创建超连接,只要打开这个窗口就可以了。 奥古多媒体l*Xc \9a%s"M`)F9Z

Wlwh4c C U PR   你只需选择一些文本,然后在这个inspector最下面的地方随便输入一个你想要的超链接。如果你想要创建锚点,那么你应该对这些锚点应用统一的命名原则,这样你的锚点名字就不会和文本成员中其他的文本重名。例如,如果你想让这个超链接实现锚点功能,那么你可以这样给它起名字 Anchor:top,Anchor:item1 ,或者 Anchor:item2. 如果你想让这个超链接跳到一个锚点的话,那么你可以给它起一些很流行的HTML语法,比如:#top,#item1,或者#item2。
9HJ{-{9\ 奥古多媒体 _d0riz]c8y
  当你创建了所有的锚点和锚点超链接之后,所剩下的就是写代码了,那么首先,我们要写一个句柄来生成一个包含该text成员中所有锚点的列表。 奥古多媒体2x$V(m4oGfG8sf+D
奥古多媒体sc$sD!{
on buildHyperlinkList me 奥古多媒体 Y.q%i]b:b
  pHyperlinkList = [:]奥古多媒体 u*s }%d0d
  pMemRef = sprite (me.spriteNum).member奥古多媒体(U8h-rs yH(w)l
  tempList = pMemRef.hyperlinks奥古多媒体-V#BxG4r2T/f%N2B,Bt
  repeat with i = 1 to tempList.count奥古多媒体S lUzZ1_9{
    tempLink = pMemRef.char[templist[ i ][1]].hyperlink奥古多媒体Ts7A.s#UP,Z
    if tempLink starts ‘‘Anchor:‘‘ then奥古多媒体x q*i"_3{(_c
      tempLink = value (‘‘#‘‘ & tempLink.word[2]) 奥古多媒体3c\5L.U!C:P
      pHyperlinkList.addProp (tempLink, tempList[ i ][1] - 1) 奥古多媒体/RbY2?3I
    end if
pt e~ }r+T4\3{  end repeat
h(^I r-Qg ja jend
奥古多媒体fO(COV xTy3rU

奥古多媒体T,\ ~ul,[
奥古多媒体"t]:M3uo.Nq;a|
  在这段代码中,先创建一个空的属性列表,然后用一个变量指向这个behavior所作用的精灵的成员。然后,将这个member中所有的超链接用一个临时表来指代。当然这里包含锚点和锚点超链接。hyperlinks属性是一个线形表,它包括text成员中所有的超链接。hyperlinks表中的每一项对应一个超链接的起始字符数和中止字符数,例如,一个文本的hyperlinks表可能是这个样子的:
sW-m"LL3h%J3G 奥古多媒体k\f9G@yf
-- [[1, 20], [24, 29], [32, 37], [40, 45], [48, 53], [60, 65], [1703, 1713], [1722, 1727], [3365, 3375], [3384, 3389], [5027, 5037], [5046, 5051], [6689, 6699]] 奥古多媒体8X0Qp(MZ F1|k&K;g
奥古多媒体2k8`8ia&d|l
  当你拥有了这个hyperlink表之后,你就可以历遍这个表,其中每一项,你可以使用text成员的hyperlink属性来取得该连接的特殊连接名字,就是你创建它时在inspector最下面写入的字符串。 奥古多媒体 p:Z8h1~/rKz
奥古多媒体b3F*Q&M QX
  不要混淆这两种属性hyperlinks和hyperlink,hyperlinks(复数)属性显示的是一个数字列表,描述的是每一个连接的始末位置。而hyperlink(单数)则是显示某一个链接的链接文本。现在我们有了hyperlink的文本,你可以检查这个文本是不是你命名的锚点之一,如果这个文本以Anchor开头,那么你就应该把这个锚点的名字提取出来,转成符号。最后,随同这个链接在文本中的其实位置,一起添加倒你的超链接表中,当这个句柄完成之后,你应该得到一个类似这样的一个列表。 奥古多媒体"`x*W7V s K

dU7y9odn%[X -- [#top: 0, #item1: 59, #item2: 1721, #item3: 3383, #item4: 5045]
Z JQ"Oj2d'~ 奥古多媒体Y Xv1Vk
  最后一步就是写一个点击链接时需要文本自动滚动的句柄了。
{nAv[+]8f 奥古多媒体 Op0C7C:E
on hyperlinkClicked me, data, range 奥古多媒体PJa!QI7\e
  if data.char[1] = ‘‘#‘‘ then奥古多媒体M(M#j7d(z7y9`2{F/f,l
    destinationAnchor = value(data)
M4HY(Kd.~B    if not voidP(pHyperlinkList.getAProp(destinationAnchor)) then
|0tDNr{      if pHyperlinkList[destinationAnchor] <= 0 then
5D1zy%Wa*J        pMemRef.scrollTop = 0
m)b$LF&]a4W      else
奥古多媒体2e I9~T3i.J
        
qce$Ef0`5G        pMemRef.scrollTop = charPosToLoc(pMemRef, pHyperlinkList[destinationAnchor]).locV奥古多媒体 Qwc5F*r
      end if 奥古多媒体9CD*_S%jeG!T^
    end if奥古多媒体:g8X J|h&y(Jbc
  end if奥古多媒体 O%|%@c3q\
end
Y#j ~ ~!t1Q奥古多媒体`(I p'|4k2d.t)d}

奥古多媒体/@wfR)Y

;}0a;tGK? rB@8A S   这个句柄中,首先是检查超链接时候是以#开头,如果是的话,就应该跳到相应的锚点处。然后用value方法将超链接字符串转成符号,然后,检查这个符号是否存在于先前我们创建的那个列表中,如果在的话,最后一步就是滚动文本到这个符号相对应的数字处,如果你要跳到的那个字符数小于或等于0,则需要把文本成员的scrolltop值设成0。否则将文本的scrolltop值设成相应的数字。通过charPosToLoc方法可以判断文本成员中字符的位置。 奥古多媒体zRkUl;y&aA }

x(u/m qB([FZk   还有一点需要注意的是,我们这么做会使文本中锚点的文本也会想超链接一样带一个下划线,而实际上我们是不需要用户看到这些的,如何解决呢?我们可以将the useHypertextStyles属性设成false就可以了。这样做之后,所有链接的颜色将不再是蓝色了。而且也没有下划线了和鼠标的变化了。缺点就是,这个属性作用于所有的链接,从此我们将无法区分那些文本带超链接。所以我们必须人为的将你的超链接文本加上下划线并且把它的fontcolor设成蓝色。
B!u(G T.mt+Fq nTm
G'N&w"gjj windows例子下载  MAC例子下载

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


音乐
落叶 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 如果爱能早些说出来
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 为你而活 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 火花 下雨天 小酒窝 樱花草 为你写诗 无可取代 无情的温柔 寂寞才说爱 忘不掉的伤 爱上你是个错 陪你一起看草原 地球人都知道我爱你
城府 假如 花海 兰亭序 爱太痛 舍不得 你若成风 女人如烟 外滩十八号 我们的纪念 摇滚怎么了 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错