wow, thanks for your help, it's really useful to me.

On 1月4日, 上午2時56分, Ricardo Tomasi <[email protected]> wrote:
> Everytime you change the "src" attribute of an image, the browser will
> fire a request to the server. That's one of the reasons why img roll-
> overs have been replaced with CSS hover a long time ago, this is a
> waste of scripting. Something like this is much more effective (and
> semantically correct):
>
> (X)HTML:
>
> <ul class="nav">
>    <li><a href="#about" class="about">About</a></li>
>    <li><a href="#product" class="product">Product</a></li>
>    <li><a href="#skill" class="skill">Skill</a></li>
> </ul<
>
> CSS:
>
> .nav a {
>     display:block;
>     text-indent:-9999px;
>     overflow: hidden;
>     width: 100px;
>     height: 30px;
>     background-repeat: no-repeat;
>
> }
>
> .about { background-image:url(images/nav/nav_skill.jpg) }
> .product { background-image:url(images/nav/nav_skill.jpg) }
> .skill { background-image:url(images/nav/nav_skill.jpg) }
>
> .nav a:hover { background-position: 0 -30px }
> ...
>
> Then all you need is 60px high images with both button states, one on
> top of each other. No preloading, no image swapping, all simple :) A
> search on google for "css rollovers" or something alike will give you
> endless examples.
>
> If you still want to do it with javascript, there's a much shorter
> way:
>
> $.each
> (['about','product','skill','service','news','member','recruit'],
> function(i, val){
>    $('<img/>').attr('src', 'images/nav/nav_' + val + '.jpg')
>       .appendTo(?)
>       .hover(function(){
>             var $this = $(this);
>             $this.attr('src', $this.attr('src').replace('.jpg',
> '_over.jpg') );
>       }, function(){
>             var $this = $(this);
>             $this.attr('src', $this.attr('src').replace('_over','') );
>       });
>
> });
>
> You could implement your cacheing with data() there but I think the
> performance penalty is likely irrelevant.
>
> cheers,
> - ricardo
>
> On Jan 3, 12:26 pm, "David .Wu" <[email protected]> wrote:
>
> > Part1
>
> >         var navPath = 'images/nav/';
> >         var navArr = new Array
> > ('nav_about','nav_product','nav_skill','nav_service','nav_news','nav_member','nav_recruit');
> >         var navArrLen = navArr.length;
>
> >         for(i=0;i<navArrLen;i++)
> >         {
> >                 $(document.createElement('img')).attr('src',navPath + 
> > navArr[i] +
> > '_over.jpg');
> >         }
>
> > Part2
> >         $('#nav img:gt(0):lt(7)').each(function(i)
> >         {
> >                 $(this).data('btnOver',navPath + navArr[i] + '_over.jpg');
> >                 $(this).data('btnOut',$(this).attr('src'));
> >                 $(this).hover(function()
> >                 {
> >                         $(this).attr('src',$(this).data('btnOver'));
> >                 },
> >                 function()
> >                 {
> >                         $(this).attr('src',$(this).data('btnOut'));
> >                 });
> >         });
>
> > Part 1 is about to pre load the images
> > Part 2 is to give each image a data property; and do the swap image
> > function when mouse over and out
>
> > my question is, the image pre load succeed, but when I mouse over the
> > image, the browser will connect to server to require something, is
> > that mean the code do
>
> >                 $(this).data('btnOver',navPath + navArr[i] + '_over.jpg');
> >                 $(this).data('btnOut',$(this).attr('src'));
>
> > these tow lines again and again when mouse over?

Reply via email to