使用javascript旋转文本 - 在IE8中无效

时间:2013-09-27 16:48:57

标签: javascript html css twitter-bootstrap

我正在使用bootstrap进行构建,并且有一个标题区域可以旋转左侧的文本,并使用bootstrap的轮播来旋转右侧的图像。文本只是复制的几个单词,主要单词是较大的和脚本,在不同的类型下面有几个单词。我正在使用的javascript旋转第一个大字,因为它应该,但将其他单词叠加在一起。在大多数浏览器中一切正常,但IE8给了我这个问题。

任何人都可以查看我的代码并给我任何帮助来解决这个问题吗?

这是我的HTML:

<div class="rotator">
   <ul>
      <li class="show">

         <p class="script">Discover<br/><br/>
         <span class="captionwhite">the many uses<br/>of glass block</span></p>
      </li>

      <li class="show">

         <p class="script">Create<br/><br/>
         <span class="captionwhite">a beautiful<br/>shower enclosure</span></p>
      </li>

      <li class="show">

          <p class="script">Illuminate<br/><br/>
          <span class="captionwhite"> your bathroom<br/>naturally</span></p>
       </li>
     </ul>
   </div>

这是我的css:

/* rotator in-page placement */
    div.rotator {       
    position:relative;

}
/* rotator css */
    div.rotator ul li {
    position:absolute;
    list-style: none;
}

这是javascript:

function theRotator() {
    //Set the opacity of all images to 0
    $('div.rotator ul li').css({opacity: 0.0});

    //Get the first image and display it (gets set to full opacity)
    $('div.rotator ul li:first').css({opacity: 1.0});

    //Call the rotator function to run the slideshow, 3000 = change to next image after 3 seconds

    setInterval('rotate()',3000);

}

function rotate() { 
    //Get the first image
    var current = ($('div.rotator ul li.show')?  $('div.rotator ul li.show') : $('div.rotator ul li:first'));

    if ( current.length == 0 ) current = $('div.rotator ul li:first');

    //Get next image, when it reaches the end, rotate it back to the first image
    var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $('div.rotator ul li:first') :current.next()) : $('div.rotator ul li:first'));

    //Un-comment the 3 lines below to get the images in random order

    //var sibs = current.siblings();
    //var rndNum = Math.floor(Math.random() * sibs.length );
    //var next = $( sibs[ rndNum ] );


    //Set the fade in effect for the next image, the show class has higher z-index
    next.css({opacity: 0.0})
    .addClass('show')
    .animate({opacity: 1.0}, 3000);

    //Hide the current image
    current.animate({opacity: 0.0}, 3000)
    .removeClass('show');

};



$(document).ready(function() {      
    //Load the slideshow
    theRotator();
    $('div.rotator').fadeIn(3000);
    $('div.rotator ul li').fadeIn(3000); // tweek for IE
});

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

来自我的评论:

  

CSS opacity规则为not supported in IE8。您必须使用专有的Microsoft filter rule(仅适用于IE浏览器)。或者,更容易使用jQuery的.hide()或设置CSS规则display:none;。

稍微查看一下代码之后,最好的选择可能就是使用jQuery的一些内置函数。您需要使用多个jQuery选项之一替换大多数opacity用法(通过使用.css().animate()),具体取决于您使用{{{{}} 1}}设置。

对于opacity(立即隐藏内容),您应该使用.hide()

.css({opacity: 0.0})

对于myElement.hide(); (立即显示内容),您应该使用.show()

.css({opacity: 1.0})

对于使用myElement.show(); 拨打.animate()(缓慢显示或隐藏),您应该使用.fadeIn().fadeOut()。您似乎已经在JS代码的底部使用opacity进行了IE调整。您可以使用与.fadeIn()相同的方式使用它,只需使用.animate({opacity: 1.0}, 3000)即可。 .fadeIn(3000)代替.fadeOut(3000)也是如此。 .animate({opacity: 0.0}, 3000).fadeIn().fadeOut()的默认持续时间相同,均为.animate(),如果您未在一段时间内明确传递数字。

jQuery函数链接到jQuery API文档,您可以在这些页面中找到完整的用法文档和示例。

如果您在使用400.fadeIn()的IE8中遇到问题,this question可能会有所帮助。