0

Я хочу использовать transition и transform, чтобы сделать слайдер. Я использую getPropertyValue для проверки текущего слайда. Он отлично работает в Chrome, но в IE9 он показывает ошибку: TypeError: Cannot read property '0' of null (Я пометил строку с **)getPropertyValue не работает в IE9?

Javascript код:

var slider = container.querySelector("ul"); 

function getCurrSliderIndex() { 
      var text = slider.style.getPropertyValue("transform"); 
      console.log(text); 
      var pattern = /[0-9]+/; 
      **var match = pattern.exec(text)[0];** 
      var intValue = parseInt(match)/width - 1; 
      return intValue; 
     } 

HTML код:

<ul id="primary-slider" class=" iuiSlider fix" style="width: 3794px; height: 271px; transform: translateX(-1084px);"> 
    <li>some content</li> 
    <li>some content</li> 
    <li>some content</li> 
... 
</ul> 
+0

Что делает ваш 'console.log (текст);' выходной? – blex

+0

Привет, @blex выводит 'translateX (-1084px)' в Chrome, значение 'transform' в строковом типе. но ничего в IE9 –

+0

Делает ли [** это демо **] (http://jsfiddle.net/2L6fqne1/) в IE9 (я не могу проверить его сейчас)? Если да, попробуйте включить этот код в свой. – blex

ответ

0

Проблема здесь не в том, что функция getPropertyValue(), которая поддерживается в IE9 +.

Но свойства CSS, такие как transform, нуждаются в префиксах поставщиков для работы в браузерах. Для того, чтобы сделать его проще, можно создать функции, которые обрабатывают их, так что вы не должны:

/* Declare these functions to handle the prefixes */ 
 

 
Object.prototype.setPrefixedProperty = function(prop, value){ 
 
    this.setProperty(prop, value); 
 
    this.setProperty('-moz-' + prop, value); 
 
    this.setProperty('-webkit-' + prop, value); 
 
    this.setProperty('-ms-' + prop, value); 
 
    this.setProperty('-o-' + prop, value); 
 
}; 
 

 
Object.prototype.getPrefixedProperty = function(prop){ 
 
    return this.getPropertyValue(prop) 
 
     || this.getPropertyValue('-moz-' + prop) 
 
     || this.getPropertyValue('-webkit-' + prop) 
 
     || this.getPropertyValue('-ms-' + prop) 
 
     || this.getPropertyValue('-o-' + prop); 
 
}; 
 

 
/* Use them like so: */ 
 

 
var slider = document.querySelector('div'); 
 

 
slider.style.setPrefixedProperty('transform', 'translateX(-1084px)'); 
 

 
var text = slider.style.getPrefixedProperty('transform'); 
 

 
alert(text);
<p>This demo should alert "translateX(-1084px)".</p> 
 
<div></div>

+0

это отлично работает. Но есть новая проблема. «transform» действительно изменился правильно, но слайд не изменяется до тех пор, пока мышь не войдет или не покинет слайд. вы можете проверить это на http://dev.photoworld.com.cn/. Я использую 'переход' для управления анимацией, которая не поддерживается в IE9. Я думал, что он должен немедленно перейти в IE9, но это не так. –

+0

@BrickYang О, я не могу получить доступ к URL-адресу ([не найден, или доступ запрещен за пределами Китая?] (Http://downforeveryoneorjustme.com/http://dev.photoworld.com.cn/)), есть ли другой адрес, к которому можно получить доступ, или вы могли бы создать [JS Fiddle] (http://jsfiddle.net/), который воспроизводит проблему? – blex

+0

извините. Я попробовал JS Fiddle, но не могу справиться с этим (я создаю много элементов и таблиц стилей в JS, не уверен, что это проблема). Не могли бы вы попробовать http://115.28.2.132/www/? –

Смежные вопросы