2009-11-17 4 views
2

두 가지 주요 요소가 포함 된 HTML 페이지가 있습니다. 하나는 은색지도 (애니메이션 압핀 포함)이고 다른 하나는 jQuery 애니메이션입니다.실버 라이트 인터럽트 JQuery 애니메이션

실버 라이트 맵에 많은 푸시 핀이 포함되어 있으면 jQuery 애니메이션이 고르지 않게됩니다. 실버 라이트가 리소스를 덜 차지할 수있게 해주고 jQuery 애니메이션의 우선 순위를 높일 수있는 방법이 있습니까?

+0

안녕하세요 닐, 당신의 Silverlight 응용 프로그램이 브라우저가 천천히 행동하는 원인이 무엇 아마도 : 실버 라이트 맵은 다음과 같이 보이는

JQuery와 같은 페이지에 다른 요소를 애니메이션합니다. 어쩌면 코드 몇 조각을 보여줄 수 있습니까? 예를 들어, 압핀을 추가 할 때이 작업을 수행하는 방법과 jQuery 애니메이션 기능을 자신의 고유 기능으로 사용할 수 있습니다. 또한 귀하의 메모리와 CPU 사용량이 실버 라이트 앱을 실행할 때 얼마나 나빠질까요? – Andrew

답변

0

당신은 개체 태그에 MaxFrameRate 매개 변수를 추가하여 실버 라이트 애플리케이션의 프레임 속도를 스로틀 수 있습니다 : - JQuery와 애니메이션을 처리하기 위해 CPU를 확보 할 수

<object ...> 
    ... 
    <param name="maxframerate" value="15 /> 
</object> 

.

+0

치료법을 적용한 것처럼 보입니다 .... 만약 내가 위에 올린 코드에 눈부신 오류가 있으면 그 사실을 알고 싶습니다! –

0

Silverlight Bing 맵 컨트롤을 래퍼하는 사용자 지정 Map 컨트롤이 있습니다. 웹 서비스에서 차량 위치에 대한 데이터를 검색했습니다. 나는 다음과 같이 ... 각 차량에 대한지도 층에 다른 사용자 지정 컨트롤을 추가 해요 :

VehicleMarker vehicleMarker = new VehicleMarker(marker); 
    markerLayer.AddChild(vehicleMarker, new Location(vehicleMarker.Location.Latitude, vehicleMarker.Location.Longitude)); 

'VehicleMarker'클래스는이 스타일이있다 : 나는 무시했습니다

<Style x:Name="VehicleMarkerStyle" TargetType="Controls:VehicleMarker" > 
     <Setter Property="RenderTransformOrigin" Value="0.5,0.5" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Controls:VehicleMarker" > 
        <Grid> 
         <Grid.RenderTransform> 
          <TransformGroup> 
           <ScaleTransform x:Name="ScaleTransform" ScaleX="1" ScaleY="1" /> 
           <TranslateTransform x:Name="TranslateTransform" X="0" Y="0"/> 
          </TransformGroup> 
         </Grid.RenderTransform> 
         <Image Source="{TemplateBinding IconUrl}" Width="30" Height="30" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

을 ' 'VehicleMarker OnApplyTemplate'온 방법 '이므로 템플릿을 적용한 후에 애니메이션 컨트롤에 첨가하는 것이 적절한 :

 TranslateTransform translateTransform = new TranslateTransform(); 
     ScaleTransform scaleTransform = new ScaleTransform(); 
     TransformGroup transformGroup = new TransformGroup(); 
     transformGroup.Children.Add(translateTransform); 
     transformGroup.Children.Add(scaleTransform); 
     this.RenderTransform = transformGroup; 
     this.RenderTransformOrigin = new Point(0.5, 0.5); 

     var storyboard = new Storyboard(); 
     storyboard.AutoReverse = true; 
     storyboard.RepeatBehavior = RepeatBehavior.Forever; 
     storyboard.Duration = new Duration(new TimeSpan(0,0,0,0,500)); 

     var animation = new DoubleAnimation(); 
     animation.From = translateTransform.Y; 
     animation.To = translateTransform.Y-5; 
     storyboard.Children.Add(animation); 
     Storyboard.SetTargetProperty(animation, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)")); 
     Storyboard.SetTarget(animation, this); 

     if (!Resources.Contains("VehicleBounceAnimation")) 
     { 
      Resources.Add("VehicleBounceAnimation", storyboard); 
     } 

     storyboard.Begin(); 

I 의심이 그 애니메이션 및 아이콘 t 수가 모자가 문제가되는지도에 추가되고 있습니다. 모든 애니메이션을 중단하면 성능이 향상됩니다. 그다지 훌륭하지 않지만 그것은 현저하게 더 좋다.

function scrollElement(name, timeInSecs) 
     { 
      var elementToScroll = document.getElementById(name); 
      if(elementToScroll!=null) 
      { 
       var jscriptElement = $('#' + name); 

       jscriptElement.animate({ scrollTop: elementToScroll.scrollHeight - elementToScroll.clientHeight }, (timeInSecs - 2) * 1000); 
      } 
      else 
      { 
       window.alert('Cannot find '+name+' to scroll'); 
      } 
     }