2013-10-01 4 views
0

Я купил несколько файлов через codecanyon.net, и они отлично работали во всех браузерах. Совсем недавно я заметил, что они не работают в Chrome.Некоторая часть кода Javascript перестала работать в последнем обновлении Chrome

Код действительно большой, и я попытался изменить некоторые вещи через пробную версию и ошибку в файле js, но не увенчался успехом. Вы можете видеть слайдер на http://miguelsart.com/scroller-test.

Как вы можете видеть, подписи должны быть скрыты, и как только вы наведите указатель мыши, они сдвинутся вверх. Но с Chrome, титры появляются автоматически, и ничего не происходит, когда вы наводите курсор.

Я думаю, что что-то не так в этой части кода:

//init captions 
Scroller.prototype.initCaptions = function() { 
    var $captions = this._$slides.find(">p:first"); 
    if (this._displayCaption) { 
     var padding = $captions.outerWidth() - $captions.width(); 
     $captions.css({width:this._slideWidth - padding, display:"inline-block"}).click(preventDefault); 
     if (this._captionPos == OUTSIDE) { 
      var heights = $captions.map(function() { return $(this).height(); }).get(); 
      var maxHeight = Math.max.apply(Math, heights);     
      $captions.css({top:this._captionAlign == TOP ? 0 : this._slideHeight, height:maxHeight}); 

      this._extHeight = $captions.outerHeight();     
      if (this._captionAlign == TOP) { 
       this._extOffset = this._extHeight; 
      } 
      $captions.addClass("outside"); 
     } 
     else { 
      if (jQuery.browser.msie && parseInt(jQuery.browser.version) > 6 && parseInt(jQuery.browser.version) < 9) { 
       $captions.addClass("ie-inside"); 
      } 
      else { 
       $captions.addClass("inside"); 
      } 
     }     
    } 
    else { 
     $captions.hide(); 
    } 
} 

Я попытался Мессинг вокруг замены дисплея для непрозрачности или видимость, но ничего не получалось. Кто-нибудь знает, что может быть неправильно?

Заранее благодарен!

+0

Разве это не вопрос для автора кодекания? – Adam

+0

@Adam Я спрашивал автора, но он не ответил. И я заметил, что он тоже не ответил на вопросы других людей:/вы не знаете, что может быть неправильным с кодом? – trialanderror

ответ

1

Я считаю, что я понял, что не так с реализацией автора, и вы правы, это связано с последней версией Chrome.

В строке 43 jquery.wt.scroller.js

this._mouseoverCaption = window.Touch ? false : opts.mouseover_caption; 

Автор плагина тестирования для собственных сенсорных способностей (путем определения если window.Touch определен). Недавно Chrome добавила возможности API touch touch в последней версии.

Так что, по словам автора, было сказано, что «вы не можете навешивать сенсорное устройство, поэтому мы не можем отображать надписи на наведении на сенсорном устройстве, чтобы мы всегда показывали их» - что логично.

Однако, поскольку сенсорные возможности существуют, это не означает, что сенсорный ввод является значением по умолчанию (как в данном случае). Modernizr решает эту проблему (на данный момент), выполняя следующие условные:

if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {

Что-то подсказывает мне, что это будет также в скором времени будет сломана. (https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touchevents.js#L42)

Итак, длинный рассказ короткий (слишком поздно, я знаю), добавьте в код плагина:

Добавьте это к строке 7 (нажать все линии вниз один):

var TOUCH = ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch;

Найти и заменить все вхождения window.Touch с кодом TOUCH.

Скажите автору плагина Я пришлю ему счет. :)

+0

Ты потрясающий. Он отлично работает сейчас, и я бы не подумал об этом сам! Огромное спасибо. Это поможет мне с моим портфолио: http://miguelbest.com/king/portfolio.html – trialanderror