2016-02-14 52 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

请为此案提供示例。 –