2016-02-14 116 views
0

我正在研究此template,並且在應用程序中包含角度後,很多功能都被破壞。以某種方式設法解決他們很多,但我不能讓這個幻燈片放映正常工作。角度休息jQuery幻燈片

這是我的HTML

<!doctype html> 
<!--[if IE 9 ]><html class="ie9" lang="en"><![endif]--> 
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en"><!--<![endif]--> 
<head> 
    <link rel="icon" type="image/ico" href="images/fav.ico"> 
    <!--stylesheet include--> 
    <link rel="stylesheet" type="text/css" media="all" href="css/bootstrap.min.css"> 
    <link rel="stylesheet" type="text/css" media="all" href="css/camera.css"> 
    <link rel="stylesheet" type="text/css" media="all" href="css/owl.carousel.css"> 
    <link rel="stylesheet" type="text/css" media="all" href="css/owl.transitions.css"> 
    <link rel="stylesheet" type="text/css" media="all" href="css/jquery.custom-scrollbar.css"> 
    <link rel="stylesheet" type="text/css" media="all" href="css/style.css"> 
    <link rel="stylesheet" type="text/css" media="all" href="css/lightbox.css"> 
    <!--font include--> 
    <link href="css/font-awesome.min.css" rel="stylesheet"> 
</head> 
<body ng-app="app"> 
<!--slider--> 
<div class="camera_wrap m_bottom_0" ng-controller="slideShowCtrl" ng-show="slideShow()"> 
    <div data-src="images/slide_02.jpg" data-custom-thumb="images/slide_02.jpg"> 
     <div class="camera_caption_1 fadeFromTop t_align_c d_xs_none"> 
      <div class="f_size_large color_light tt_uppercase slider_title_3 m_bottom_5">Meet New Theme</div> 
      <hr class="slider_divider d_inline_b m_bottom_5"> 
      <div class="color_light slider_title tt_uppercase t_align_c m_bottom_45 m_sm_bottom_20"><b>Attractive &amp; Elegant<br>HTML Theme</b></div> 
      <div class="color_light slider_title_2 m_bottom_45">$<b>15.00</b></div> 
      <a href="#" role="button" class="tr_all_hover button_type_4 bg_scheme_color color_light r_corners tt_uppercase">Buy Now</a> 
     </div> 
    </div> 
    <div data-src="images/slide_01.jpg" data-custom-thumb="images/slide_01.jpg"> 
     <div class="camera_caption_2 fadeIn t_align_c d_xs_none"> 
      <div class="f_size_large tt_uppercase slider_title_3 scheme_color">New arrivals</div> 
      <hr class="slider_divider type_2 m_bottom_5 d_inline_b"> 
      <div class="color_light slider_title tt_uppercase t_align_c m_bottom_65 m_sm_bottom_20"><b><span class="scheme_color">Spring/Summer 2014</span><br><span class="color_dark">Ready-To-Wear</span></b></div> 
      <a href="#" role="button" class="d_sm_inline_b button_type_4 bg_scheme_color color_light r_corners tt_uppercase tr_all_hover">View Collection</a> 
     </div> 
    </div> 
    <div data-src="images/slide_03.jpg" data-custom-thumb="images/slide_03.jpg"> 
     <div class="camera_caption_3 fadeFromTop t_align_c d_xs_none"> 
      <img src="images/slider_layer_img.png" alt="" class="m_bottom_5"> 
      <div class="color_light slider_title tt_uppercase t_align_c m_bottom_60 m_sm_bottom_20"><b class="color_dark">up to 70% off</b></div> 
      <a href="#" role="button" class="d_sm_inline_b button_type_4 bg_scheme_color color_light r_corners tt_uppercase tr_all_hover">Shop Now</a> 
     </div> 
    </div> 
</div> 

<div ng-view></div> 

<!--scripts include--> 
<script src="js/jquery-2.1.4.js"></script> 
<script src="js/jquery-ui.js"></script> 
<script src="js/jquery-migrate-1.2.1.min.js"></script> 
<script src="js/retina.js"></script> 
<script src="js/camera.min.js"></script> 
<script src="js/jquery.easing.1.3.js"></script> 
<script src="js/waypoints.min.js"></script> 
<script src="js/jquery.isotope.min.js"></script> 
<script src="js/owl.carousel.min.js"></script> 
<script src="js/jquery.custom-scrollbar.js"></script> 
<script src="js/scripts.js"></script> 
<script src="js/lightbox.js"></script> 
<script src="js/angular.js"></script> 
<script src="js/angular-resource.js"></script> 
<script src="js/angular-route.js"></script> 
<script src="js/angular-ui.min.js"></script> 
<script src="js/angular-animate.js"></script> 
<script src="js/sortable.js"></script> 
<script src="js/ng-file-upload.js"></script> 
<script src="js/ng-file-upload-shim.js"></script> 
<script src="app/app.js"></script> 
<script src="app/controllers.js"></script> 
<script src="app/factory.js"></script> 
<script src="app/filters.js"></script> 

</body> 
</html> 

我控制器

controllers.slideShowCtrl = function($scope, $location){ 
    $scope.slideShow = function(){ 
     if($location.url() == '/' || $location.url() == '/home'){ 
      $scope.slideShowView = true; 
      return true; 
     }else{ 
      $scope.slideShowView = false; 
      return false; 
     } 
    } 
} 

這是jQuery的創建幻燈片

// camera slideshow 
(function(){ 
    var cs = $('.camera_wrap'); 
    if(cs.length){ 
     cs.camera({ 
      height: '41%', 
      navigation: true, 
      pagination: true, 
      playPause:false, 
      thumbnails: false, 
      time: 4000, 
      transPeriod : 1000, 
      navigationHover: false, 
      onLoaded: function() { 
       var image = $('.camera_wrap .camera_src > [data-src]'), 
        len = image.length, 
        bullet = $('.camera_wrap .camera_pag_ul > li'); 
       if(bullet.find('.custom_thumb').length) return; 
       for(var i = 0; i < len; i++){ 
        bullet.eq(i).append('<div class="custom_thumb tr_all_hover"><img src="' + image.eq(i).data('custom-thumb') + '" alt=""></div>'); 
       } 
       bullet.on("mouseenter mouseleave",function(){ 
        $(this).children('.custom_thumb').toggleClass("active"); 
       }); 
      } 
     }); 
     cs.find('.camera_prev').append('<i class="fa fa-angle-left"></i>'); 
     cs.find('.camera_next').append('<i class="fa fa-angle-right"></i>'); 
    } 
})(); 

的問題是在這裏。在第一次加載或重新加載(f5)時,滑塊看起來不錯並且播放良好。

Slider OK

點擊頁面槽和再次訪問家庭(#/家)之後,滑塊有時打破,有時不這樣做,有時它修復了他的自我。

Slider broken

並刷新網頁滑塊後再次工作正常並且打得很好。

如果你們需要任何額外的代碼塊,讓我知道,我會提供。

謝謝

+0

是否有可能使一個小提琴/ plunker? –

+0

對不起,但我不認爲在這裏可能會出現這種情況......我相信有很多依賴關係,等等......我希望有人會在那個jquey代碼中看到問題,他會知道如何改變它使用角 –

+0

嘗試把你的jquery沒有衝突代碼。看看這個問題是否解決。 $ .noConflict(); –

回答

1

理論上講,您將JQ幻燈片放在角度視圖中。每次訪問視圖時都需要初始化。因爲在視圖/路線更改您的幻燈片將被丟棄從DOM,因此您的幻燈片的所有內容和實例也將被丟棄。

問題在這裏。在第一次加載或重新加載(f5)時,滑塊看起來不錯並且播放良好。

是它應該工作,因爲幻燈片取得初步WELLY

點擊頁面槽和再次訪問家庭(#/家)之後,滑塊有時打破,有時不這樣做,有時它修復了他自。

,因爲它得到了來自DOM丟棄時的路線/視圖改變

=>爲了使工作只是簡單地再次重新初始化它究竟是後視圖渲染幻燈片不能正常初始。

// This is a dirty patch up, and only showing the fix in most basic way. So you could understand the concept of angular with other DOM manipulation like JQ. 
// You should try to study more about DOM manipulation in angular. And for better solution, you can go with directive 
controllers.slideShowCtrl = function($scope, $location, $timeout){ 
    $scope.slideShow = function(){ 
     if($location.url() == '/' || $location.url() == '/home'){ 
      $scope.slideShowView = true; 
      return true; 
     }else{ 
      $scope.slideShowView = false; 
      return false; 
     } 

     // I just putting slideshow initial right after $scope.slideShow() return true. 
     // To make sure slideshow got initial after the ng-show condition return true. 
     $scope.$watch(function() { 
      return $scope.slideShow(); 
     }, function (isShow) { 

      // This $timeout to 100% sure slideshow initial only happen after view got all its base content rendered 
      $timeout(function() { 
       if(isShow){ 
        var cs = $('.camera_wrap'); 
        if(cs.length){ 
         cs.camera({ 
          height: '41%', 
          navigation: true, 
          pagination: true, 
          playPause:false, 
          thumbnails: false, 
          time: 4000, 
          transPeriod : 1000, 
          navigationHover: false, 
          onLoaded: function() { 
           var image = $('.camera_wrap .camera_src > [data-src]'), 
            len = image.length, 
            bullet = $('.camera_wrap .camera_pag_ul > li'); 
           if(bullet.find('.custom_thumb').length) return; 
           for(var i = 0; i < len; i++){ 
            bullet.eq(i).append('<div class="custom_thumb tr_all_hover"><img src="' + image.eq(i).data('custom-thumb') + '" alt=""></div>'); 
           } 
           bullet.on("mouseenter mouseleave",function(){ 
            $(this).children('.custom_thumb').toggleClass("active"); 
           }); 
          } 
         }); 
         cs.find('.camera_prev').append('<i class="fa fa-angle-left"></i>'); 
         cs.find('.camera_next').append('<i class="fa fa-angle-right"></i>'); 
        } 
       } 
      }, 0) 

     }) 
    } 
} 

附: 請注意,由於我們沒有任何fiddle/plunker以確保解決方案能夠正常工作,所以我使用了一些技巧,這將爲我提供工作代碼的答案提供最高可能性。您可以嘗試刪除$timeout,看看它是否工作

+0

幹得好,夥計。是的,我是新的JS和DOM,這是我的第一個AngularJS應用程序。我明白我現在需要做什麼,問題在哪裏。 Thx解釋 –

+0

@受歡迎; –

1

我認爲創建幻燈片的指令可以解決這個問題。

我已經面對這種類型的問題與sw slider滑塊。創建指令後解決我的問題。

您的指令

 angular.module('app', []) 
    .directive('cameraSlider', function($timeout){ 
     return { 
     restrict: 'AC', 
     templateUrl: function(element, attrs) { 

       return attrs.templateUrl | 'your_remplate_url.html'; 
     } 
     link: function($scope, element, attrs){ 
     $timeout(function(){ 

     element.camera({ 
      height: '41%', 
      navigation: true, 
      pagination: true, 
      playPause:false, 
      thumbnails: false, 
      time: 4000, 
      transPeriod : 1000, 
      navigationHover: false, 
      onLoaded: function() { 
       var image = $('.camera_wrap .camera_src > [data-src]'), 
        len = image.length, 
        bullet = $('.camera_wrap .camera_pag_ul > li'); 
       if(bullet.find('.custom_thumb').length) return; 
       for(var i = 0; i < len; i++){ 
        bullet.eq(i).append('<div class="custom_thumb tr_all_hover"><img src="' + image.eq(i).data('custom-thumb') + '" alt=""></div>'); 
       } 
       bullet.on("mouseenter mouseleave",function(){ 
        $(this).children('.custom_thumb').toggleClass("active"); 
       }); 
      } 
     }); 

     element.find('.camera_prev').append('<i class="fa fa-angle-left"></i>'); 
     element.find('.camera_next').append('<i class="fa fa-angle-right"></i>'); 
     },200) 

     } 
     }; 

}) 
現在

你可以使用camera-slider類相機包類

+0

請爲此案提供示例。 –