2014-03-31 4 views
0

나는 tumblr의 v1 json API를 사용하여 게시물에서 이미지를 가져 왔으며이 부분은 잘 작동합니다. 그러나 Im이주기 2 플러그 접속 식을 방아쇠를 당길 수 없으면, 일단이 심상이 dom으로두면 - 그것은 너무 빨리 발사하는 것처럼 보인다. http://jsfiddle.net/orionrush/9XEw2/dom2.axs가 ajax를 통해로드되기 전에 실행됩니다.

을 감안할 때 내 예는 사람이 왜 작동하지 않습니다에 관한 올바른 방향으로 날 지점 수 있습니다 여기에

는 작업 바이올린입니까? 많은 감사 한마디로

나는 이미지를 가져오고 다음으로 DOM에 그들을 배치 :

var Tumblr = Tumblr || {}; 
Tumblr.RecentPhotos = function(el, postsCount, tagged) { 
    var apiUrl = "http://2014frames.tumblr.com/api/read/json?callback=?&filter=text&type=photo&num=" + (postsCount || 10) + "&tagged=" + tagged; 
//var apiUrl = "http://" + document.domain + "/api/read/json?callback=?&filter=text&type=photo&num=" + (postsCount || 10)+ "&tagged=" + tagged; 

    var renderPosts = function(posts) { 
    return $.map($.map(posts, postInfo), renderPost); 
    }; 

    var renderPost = function(post) { 
    //return "<div><a href='" + post.url + "' ><img src='" + post.src + "' width='500' data-cycle-title='"+ post.title + "' /><div class='cycle-overlay'>" + post.title + "</div></a></div>"; 
    return "<div><img src='" + post.src + "' width='100%' data-cycle-title='"+ post.title + "' /><div class='cycle-overlay'>" + post.title + "</div></div>"; 

    }; 
    var postInfo = function(post) { 
    console.log(post.photos[0]); 
     return { 
     title: post.photos[0]['caption'], 
     url: post["url"], 
     height: post.photos[0]['height'], 
     src: post.photos[0]['photo-url-500'] 
     }; 
    }; 
    return { 
    render: function() { 
     $.getJSON(apiUrl, function(data) { 
     $("<div class='cycle-slideshow composite-example' data-cycle-fx=fadeout data-cycle-timeout=0 data-cycle-loader=wait data-cycle-auto-height=container data-cycle-slides='> div' >").appendTo($(el)).append(renderPosts(data.posts).join("\n")); 
     }); 
     return this; 
    } 
    } 
}; 

그리고 다음으로 모든 트리거 :

jQuery(function() { new Tumblr.RecentPhotos(jQuery(".slideshow"),10 ,"news").render(), function(){$(".cycle-slideshow").cycle();} }); 
+0

이제이 문제를 해결하려고합니다.하지만 Tumblr 직원/지원팀에서 API의 V1 사용을 중단하는 것에 대해 반복적으로 언급했기 때문에주의해야합니다. – Ally

+0

API에 대해 들었지만, JSON 등으로 꽤 새로 말해서 알 수 있습니다. 새로운 API에는 복잡성이 추가됩니다. 이 포스트를 올려 놓기 때문에 웹 사이트를 운영하는 사람들은 게시하는 방식이 약간 바뀌어 단일 이미지가 아직 나오지 않았습니다. – orionrush

답변

0

그것은 몇 가지 작업이 필요합니다 그러나 나는 당신의 주된 문제를 발견했다고 생각합니다 : 오직 한 장의 사진이 있다면, 배열 photos은 비어 있습니다. 그리고 당신은 그 객체의 다른 곳에있는 사진에 대한 귀하의 정보를 얻을 필요가 있습니다.

변경된 JS Fiddle here을 참조하십시오.

+0

동맹국, 당신은 내가 아직 만나지 못한 문제를 해결했습니다! 그렇게 해줘서 고마워. 아직도 슬라이드 쇼를 인스턴스화 할 수 없다는 내 원래의 문제로 여전히 붙어 있습니다. :/ – orionrush

+0

그래서 나는 render 함수에서 join 호출의 끝으로 연결함으로써 사이클을 인스턴스화하는 방법을 알아 냈다. 이 스크립트에주기가 어떻게 '구워 졌는지'에 대해서는 만족스럽지 않지만 이후에는 콜백으로 호출 할 수 있기를 정말로 원하지만 지금은 괜찮습니다. – orionrush

+0

http://jsfiddle.net/orionrush/69Zd2/4/ – orionrush

0

DOM에 동적으로 추가 된 슬라이드 쇼를 트리거하는 솔루션을 찾았습니다. 같은 스크립트 내에서 요소가 DOM에 추가 된 후 슬라이드 쇼를 실행하는 방법을 찾지 못했을 수도 있습니다.. 내 솔루션에 가장 낮은 오버 헤드가 없을 수도 있지만 가장 간단한 방법은 두 번째 스크립트를 만드는 것입니다. 두 번째 스크립트는 매 30 초마다 새 DOM 요소를 간단히 확인한 다음 슬라이드 쇼가 시작된 후 해고되었습니다. 여기

setTimeout(function trigger() { 
    if ($('.cycle-slideshow').length) { 
     $('.cycle-slideshow').cycle({ 
      timeout: 6000, 
      fx: 'fadeout', 
      random: true, 
      pauseOnHover: true, 
      autoHeight: 'calc' 
     }); 
     } else { 
      // keep trying until the slideshow elements are added to DOM 
      setTimeout(trigger, 50); 
     } 
     }, 50); 
    }); 

내 작업 바이올린 : 트리거 이런 식으로 뭔가를 보이는

http://jsfiddle.net/orionrush/pAMLM/

나는 다른 방법을보고 싶지만,이 작업 솔루션입니다.